Этот скрипт получит список каталогов (и их подкаталогов), пройдется по каждому каталогу для проверки подкаталогов, а затем выведет список только тех имен каталогов, которые не содержат подкаталог.Исходный скрипт в указанной ссылке работает аналогично, за исключением того, что он будет содержать только полностью пустых каталогов (не содержащих подкаталоги или файлов).Вот разбивка каждого раздела кода:
В вашем примере for /d
получает рекурсивный список каталогов:
for /d /r %1 %%A in (.) do ( )
- для / d проходит через указанный набор каталогов
- для / d / r сообщает циклу
for
, что его необходимо выполнить вподкаталоги - % 1 - это необязательный путь к файлу, указанный в командной строке
- %% A будет возвращать текущий каталог в каждом цикле
- in (SET) указывает каталог, установленный для циклического переключения
- Указание " in (.) " указывает
for
циклически проходить по всем каталогам
Код внутри вашего цикла for
затем проверяет каждый каталог на предмет его пустоты *:
dir /ad /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
- dir/ ad / b "PATH" получает список подкаталогов по указанному пути *
- " %% ~ fA "расширяет имя текущего каталога до полного пути
- 2> nul скрывает любые
dir
ошибки путем перенаправления STDERR на nul - | передает список подкаталогов, найденных
dir
в findstr
- findstr "^" , затем проверяет непустой список подкаталогов
- > nul скрывает результаты
findstr
, перенаправляя весь вывод на nul - || запускикоманда, если предыдущая команда завершилась неудачно (без
findstr
результатов) - echo %% ~ fA возвращает имя каталога, если подкаталоги не найдены *
* Обратите внимание : как указано LotPings , код, который вы предоставили, даст результаты, отличные от приведенного в примере.dir /a /b
перечисляет все файлы и каталоги, в то время как dir /ad /b
перечисляет только каталоги.Это означает, что ваш скрипт выведет список всех каталогов, не содержащих подкаталог (но которые могут все еще содержать файлы).Если это было ожидаемое поведение, пожалуйста, не обращайте внимания на это примечание.
Редактировать: далее разбил приведенный выше список команд, как предложено Бен Фойгт .