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

ilyadud 24-08-2012 07:53 1975972

Удаление файлов нулевого размера, а затем удаление пустых каталогов
 
Здравствуйте! Очень необходима помощь в написании простого скрипта удаления. Скрипт работает в папке, в которой он запущен. Глубина поиска и удаления желательно не менее 7. Вот алгоритм:

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

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

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

Busla 24-08-2012 09:39 1976015

forfiles возвращает в том числе и размер файла

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

El Sanchez 24-08-2012 16:45 1976294

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 1976515

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 1976612

Всем огромное спасибо! Скрипт проверил - вроде работает без ошибок

El Sanchez 25-08-2012 10:57 1976658

Цитата:

Цитата megaloman
Но не понимаю, почему второй For нельзя было сделать проще »

megaloman, да, такой вариант тоже имеет право на существование. Просто я подумал, что циклу нужно обрабатывать как можно меньше строк результата вывода команды dir, поэтому и пропустил через findstr. Что быстрее? Не проверял. :)


Время: 07:52.

Время: 07:52.
© OSzone.net 2001-