|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Бесконечный цикл, если в имени папки есть знак процента |
|
CMD/BAT - [решено] Бесконечный цикл, если в имени папки есть знак процента
|
Новый участник Сообщения: 3 |
Прошу помочь.
Есть такой код батника: @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 может быть любым. Сторонние утилиты использовать нельзя. Расширенную обработку команд использовать крайне нежелательно. В инете все перерыл, ответа не нашел. Статей по этому вопросу, даже игнорируя ограничения выше, никаких не встретил. Если есть идеи, просьба поделиться. |
|
Отправлено: 17:02, 29-06-2020 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата whitejoy:
|
|
Отправлено: 18:21, 29-06-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 18:25, 29-06-2020 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:33, 29-06-2020 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Код от Fors1k, к сожалению, не понимаю. С Power Shell не дружу, попробовал просто впихнуть код в чистый батник - не сработало. Код от Fors1k, к сожалению, не понимаю. С Power Shell не дружу, попробовал просто впихнуть код в чистый батник - не сработало. |
||
Отправлено: 08:29, 30-06-2020 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать whitejoy, Вы не писАли, что надо удалять пустые папки в подпапках. Здесь это не раз обсуждалось.
@Echo Off Set "BoxIn=D:\001\001" FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /S /B /A:D ^|Sort /R`) DO 2>nul Rd "%%d" Exit /B Цитата whitejoy:
|
|
------- Последний раз редактировалось megaloman, 30-06-2020 в 09:03. Отправлено: 08:51, 30-06-2020 | #6 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Спасибо огромное! Код ниже отрабатывает идеально! Цитата megaloman:
Можете, если не сложно, пояснить назначение конструкции "^|Sort /R"? |
||
Отправлено: 09:19, 30-06-2020 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать whitejoy,
Цитата whitejoy:
![]() не сложно, пояснить назначение конструкции "^|Sort /R
Что делает Dir? Выдаёт список папок, например,
dir Z:\Box_In\ /s /a:D /B Z:\Box_In\001 Z:\Box_In\001\002 Z:\Box_In\001\002\003 Z:\Box_In\001\002\003\004 Z:\Box_In\001\002\003\004\005 Z:\Box_In\001\002\003\004\005\006 Что делает 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 Z:\Box_In\001\002\003\004\005 Z:\Box_In\001\002\003\004 Z:\Box_In\001\002\003 Z:\Box_In\001\002 Z:\Box_In\001 Шляпа ^ в For надо для так называемого экранирования служебного символа | перенаправления вывода команды Dir на вход команды Sort для корректной работы For, в простой командной строке она не нужна |
|
------- Последний раз редактировалось megaloman, 30-06-2020 в 10:38. Отправлено: 10:26, 30-06-2020 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 14:14, 30-06-2020 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] бесконечный цикл выполнения из bat | n_i_x | Скриптовые языки администрирования Windows | 9 | 24-06-2020 00:13 | |
После выключения компьютер входит в бесконечный цикл | LamoSS | Непонятные проблемы с Железом | 2 | 07-02-2020 19:36 | |
CMD/BAT - [решено] Сворачивание консольного окна, если в имени запускаемого файла есть скобки | V!RTuE | Скриптовые языки администрирования Windows | 1 | 27-02-2015 19:28 | |
Разное - Программа для решения простых Судоку (бесконечный цикл) | m.s.dos | Программирование и базы данных | 3 | 07-01-2009 05:05 | |
бесконечный цикл. Функция не возвращает FALSE ? | xamelion | Вебмастеру | 5 | 19-09-2005 14:21 |
|