PDA

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


ilyadud
24-08-2012, 07:53
Здравствуйте! Очень необходима помощь в написании простого скрипта удаления. Скрипт работает в папке, в которой он запущен. Глубина поиска и удаления желательно не менее 7. Вот алгоритм:

1. Удалить все файлы нулевого размера в каталогах и подкаталогах (проникать как можно глубже).
2. Удалить все пустые каталоги (точно так же проникать)
3. Конец

Т.е. нужно удалить все файлы нулевого размера, которые вообще есть в каталогах и подкаталогах (все до единого).
Затем просмотреть все до единого существующие каталоги и подкаталоги, и удалить пустые.

Думаю, смысл понятен. Буду благодарен за помощь!

Busla
24-08-2012, 09:39
forfiles возвращает в том числе и размер файла

для удаления пустых каталогов получаем полный список каталогов, сортируем в обратном порядке, каждый их них пытаемся удалить через rd - непустые он не удалит

El Sanchez
24-08-2012, 16:45
ilyadud, пробуйте:

@Echo Off
SetLocal
For /F "Tokens=*" %%A In ('Dir /B /S /AD 2^>nul^|Sort /R') Do (
For /F "Tokens=3*" %%B In ('Dir "%%A" /S /A-D /N /-C 2^>nul^|FindStr /irc:":[0-5][0-9] *0"') Do Del /F /Q "%%A\%%C" 2>nul&&Echo:Файл %%A\%%C удален.
RD "%%A" 2>nul&&Echo:Каталог %%A удален.
)

megaloman
24-08-2012, 23:27
El Sanchez, Я в восторге от Вашего решения. Но не понимаю, почему второй For нельзя было сделать проще
FOR /F "usebackq delims=" %%i IN (`Dir "%%A\*.*" /s /b /a:-d 2^>nul^`) DO If %%~zi==0 Del "%%i"&&Echo:Файл %%i удален

ilyadud
25-08-2012, 07:30
Всем огромное спасибо! Скрипт проверил - вроде работает без ошибок

El Sanchez
25-08-2012, 10:57
Но не понимаю, почему второй For нельзя было сделать проще »
megaloman, да, такой вариант тоже имеет право на существование. Просто я подумал, что циклу нужно обрабатывать как можно меньше строк результата вывода команды dir, поэтому и пропустил через findstr. Что быстрее? Не проверял. :)




© OSzone.net 2001-2012