Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Отбор файлов по расширению, последующее их удаление. (http://forum.oszone.net/showthread.php?t=169019)

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

shadowbat 22-05-2010 08:11 1418627

Цитата:

Цитата SaintVictor
необходимо из всего этого мусора отобрать файлы по расширению(ям), собрать их в одном месте, грохнуть все потом разом. »

я такую задачу делаю через поиск Win7. в поиске вбиваю *.mp3 а потом в окне поиска прямо их все выделяю и удаляю. винь сама их удаляет из их папок :happy:
или по этой же схеме вместо удаления нажать Ctrl+X Ctrl+V куда надо

amel27 22-05-2010 10:10 1418656

Цитата:

Цитата 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

З.Ы. из множества одноименных файлов будет перенесен только первый

megaloman 22-05-2010 13:21 1418744

Просто получается решить задачу с помощью батника.
Код:

@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.

Время: 11:17.
© OSzone.net 2001-