Войти

Показать полную графическую версию : Удаление всех файлов кроме одного в подпапках


SELFY
27-07-2012, 11:24
Можно ли с помошью BAT-файла удалить все файлы из подпапок, кроме одного-трех, которые во всех подпапках имеют одно и то же название ?

NoIZz
27-07-2012, 18:49
Для однгого файла

set FILEMASK=*.*

set FILEPATH=D:\TEMP

set FILENOTDELETE=file.file


for /f %%i in ('dir /b /s "%FILEPATH%\%FILEMASK%"') do if /I not "%%i" == "%%~dpi%FILENOTDELETE%" del /f/q "%%i" >nul 2>nul

megaloman
29-07-2012, 15:34
@Echo Off

Set Otkuda=E:\DDDDD

Set NoDelete=C:\%~nx0.NoDelete
@Echo %0 >%NoDelete%

@Echo \01-Zig Zaggity Woop Woop Pt. 1.mp3 >>%NoDelete%
@Echo \04-Don't You Feel My Leg.mp3 >>%NoDelete%
@Echo \07-Next Week Sometime.mp3 >>%NoDelete%

FOR /F "usebackq delims=" %%f IN (`xcopy "%Otkuda%\*.*" C:\ /L /S /EXCLUDE:%NoDelete%`) DO Del "%%f"

Del %NoDelete%
Как это работает:
- Обрабатываем файлы в папке (с подпапками), определёнными в переменной Otkuda
- В текстовый файл в корне C:\ сохраняем список неудаляемых файлов (его имя я сделал по имени батника с добавлением .Nodelete. Для примера, я здесь указал 3 файла. Для бОльшей надёжности перед именем файла поставил \
В том же списке и имя батника (если он расположен в обрабатываемой папке для защиты от удаления самого себя)
- Xcopy выдаёт список (/L) файлов в указанной папке и подпапках (/S) для обработки в команде For (в частности, для удаления), за исключением имён записанных в наш текстовый файл (ключ /EXCLUDE). Следует учесть особенность работы ключа EXCLUDE /EXCLUDE:file1[+file2][+file3]...
Указывает список файлов, содержащих строки. Каждая строка
должна находиться в отдельной линии в файлах. Если одна из
строк совпадает с любой частью абсолютного пути копируемого
файла, то такой файл копироваться не будет. Например,
указывание таких строк, как \\obj\\ или .obj, исключает
из копирования все файлы в папке obj и, соответственно, все
файлы с расширением .obj.




© OSzone.net 2001-2012