SaintVictor |
03-03-2010 07:40 1360062 |
Отбор файлов по расширению, последующее их удаление.
Есть вот такой скриптик но гад не хочет работать, выдает синтаксическую ошибку на 8 строке в 1 символе.
Обьясните ламеру что не так, может у кого есть примеры свойх скриптов.
Вообще задача такая есть папка с кучей подпапок и файлов, необходимо из всего этого мусора отобрать файлы по расширению(ям), собрать их в одном месте, грохнуть все потом разом.
Set FSO = CreateObject("Scripting.FileSystemObject")
sEXT ="mp3"
sDIR ="d:\temp1"
sNEW ="d:\temp"
Set objDIR =GetFolder(sDIR)
GoSubFolder objDIR
Sub MainSub (objDIR)
For Each efile in objDIR.files
fNAME=efile
fEXT =FSO.GetExtensionName(efile.Path)
if LCase (fEXT)= LCase(sEXT) Then sEXIST= sNEW & efile.NAME
if ((FSO.FileExists(sEXIST)) AND (efile<>sEXIST)) Then
delFile sEXIST
End if
On Error Resume Next
MoveFile efile. sNEW
Next
End Sub
|
Цитата:
Цитата SaintVictor
необходимо из всего этого мусора отобрать файлы по расширению(ям), собрать их в одном месте, грохнуть все потом разом. »
|
я такую задачу делаю через поиск Win7. в поиске вбиваю *.mp3 а потом в окне поиска прямо их все выделяю и удаляю. винь сама их удаляет из их папок :happy:
или по этой же схеме вместо удаления нажать Ctrl+X Ctrl+V куда надо
|
Цитата:
Цитата SaintVictor
Обьясните ламеру что не так »
|
это лишь кусок скрипта, в котором отсутствует определение ф-ции GoSubFolder
Цитата:
Цитата SaintVictor
Вообще задача такая есть папка с кучей подпапок и файлов, необходимо из всего этого мусора отобрать файлы по расширению(ям), собрать их в одном месте »
|
где-то так:
Код:
Set oFSO = CreateObject("Scripting.FileSystemObject")
MoveByExt "d:\temp1", "d:\temp", "mp3"
Sub MoveByExt(sDirFrom, sDirTo, sFileExt)
Dim oS, cS, oD, sD, oI, cF
If Not oFSO.FolderExists(sDirTo) Then oFSO.CreateFolder(sDirTo)
Set oS = oFSO.GetFolder(sDirFrom)
Set oD = oFSO.GetFolder(sDirTo)
Set cS = oS.SubFolders
On Error Resume Next
For Each oI In cS
MoveByExt oI.Path, sDirTo, sFileExt
Next
Set cF = oS.Files
For Each oI In cF
If StrComp(oFSO.GetExtensionName(oI.Path),sFileExt,1)=0 Then oI.Move(oD.Path &"\")
Next
End Sub
З.Ы. из множества одноименных файлов будет перенесен только первый
|
Просто получается решить задачу с помощью батника.
Код:
@Echo Off
Set Fold=E:\Delete\
Set Ext=avi
Set FoldExt=%Fold:~0,-1%.%Ext%\
FOR /F "usebackq delims=" %%i IN (`dir "%Fold%" /A:D /B /s`) DO Call :SubDir "%%~fi" "%%i"
GoTo :EOF
:SubDir
Set L=True
Set ff=%~1
Set ff=%FoldExt%%ff:~3%\
FOR %%s IN ("%~1\*.%Ext%") DO (
If %L%==True Md "%ff%" >Nul 2>Nul
Set L=False
Move /Y "%%~fs" "%ff%" >Nul
)
Рядом с исходной директорией (в примере E:\Delete\) создаём директорию с таким же именем, но с расширением файлов (в примере E:\Delete.avi\)
И туда перемещаем все файлы с указанным расширением, сохраняя дерево директорий. Зачем? - сохраняем в целостности одноимённые файлы, да и вернуть всё назад при этом очень просто-ничего необратимого при этом мы не делаем. Впоследствии убить директорию - нет проблем.
|
Время: 11:17.
© OSzone.net 2001-