![]() |
Бесконечный цикл, если в имени папки есть знак процента
Прошу помочь.
Есть такой код батника: @echo off cls goto :2 :3 for /d %%I in ("%~1\*") do (call :3 "%%~I" & rd /q "%%~I" & cls & echo "%%~I") exit /b :2 call :3 "D:\001\001" pause Автор - не я, где-то подсмотрел. ))) Код удаляет все пустые папки в каталоге D:\001\001, сколько бы их там ни было. Но в каталоге помимо пустых папок есть такие папки: %Common Desktop% %Common Programs% %System% 001 002 003 C_ SysDlls Из-за "%" в названиях папок батник сходит с ума. Переименовывать папки нельзя. Путь D:\001\001 может быть любым. Сторонние утилиты использовать нельзя. Расширенную обработку команд использовать крайне нежелательно. В инете все перерыл, ответа не нашел. Статей по этому вопросу, даже игнорируя ограничения выше, никаких не встретил. Если есть идеи, просьба поделиться. |
Цитата:
Код:
param( |
Код:
@Echo Off |
тот же код что и у megaloman, только показать что работает без проблем и в глубину:
Код:
@echo off |
Цитата:
Код от Fors1k, к сожалению, не понимаю. С Power Shell не дружу, попробовал просто впихнуть код в чистый батник - не сработало. Код от Fors1k, к сожалению, не понимаю. С Power Shell не дружу, попробовал просто впихнуть код в чистый батник - не сработало. |
whitejoy, Вы не писАли, что надо удалять пустые папки в подпапках. Здесь это не раз обсуждалось.
Код:
@Echo Off Цитата:
|
Цитата:
Спасибо огромное! Код ниже отрабатывает идеально! Цитата:
Можете, если не сложно, пояснить назначение конструкции "^|Sort /R"? |
whitejoy,
Цитата:
не сложно, пояснить назначение конструкции "^|Sort /R
Что делает Dir? Выдаёт список папок, например,
dir Z:\Box_In\ /s /a:D /B Код:
Z:\Box_In\001 Что делает Rd "папка"? Пытается удалить "папка", попытка будет успешна, если "папка" пустая, иначе ошибка. Что произойдет, если сделать в приведенном примере Rd "Z:\Box_In\001"? Папка удалена не будет, так как она не пустая - есть подпапки. Аналогично Rd "Z:\Box_In\001\002" .... Rd "Z:\Box_In\001\......005" Если в For ставим Dir в таком виде, то удалится только последняя пустая папка цепочки Z:\Box_In\001\002\003\004\005\006, так как все предыдущие папки, выданные Dir непустые. Команда Sort /R в данном контексте позволяет отсортировать вывод команды Dir в обратном алфавитном порядке, то есть, dir Z:\Box_In\ /s /a:D /B |sort /R Код:
Z:\Box_In\001\002\003\004\005\006 Шляпа ^ в For надо для так называемого экранирования служебного символа | перенаправления вывода команды Dir на вход команды Sort для корректной работы For, в простой командной строке она не нужна |
Цитата:
|
Время: 18:27. |
Время: 18:27.
© OSzone.net 2001-