Компьютерный форум 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=239450)

SELFY 27-07-2012 11:24 1959857

Удаление всех файлов кроме одного в подпапках
 
Можно ли с помошью BAT-файла удалить все файлы из подпапок, кроме одного-трех, которые во всех подпапках имеют одно и то же название ?

NoIZz 27-07-2012 18:49 1960230

Для однгого файла

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 1961059

Код:

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


Время: 06:11.

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