3

Как найти все пустые каталоги, используя пакетный скрипт?

У меня на рабочем столе есть папка с названием "шоу". Внутри него много подкаталогов. Некоторые каталоги пусты, а в других есть файлы.

Как я могу зациклить все подпапки и распечатать все папки, которые пусты?

Ниже я попробовал. Проблема в том, что он распечатывает все папки ... даже если подпапка не пуста.

@echo off

SET "MYPATH=C:\Users\dave\Desktop\shows"

 for /d %%a in ("%mypath%\*") do (
    dir /b /s "%MYPATH%"
    pause
)
pause

2 ответа2

4

Вот один из способов.

Из командной строки:

for /r "C:\Users\dave\Desktop\shows" /d %F in (.) do @dir /b "%F" | findstr "^" >nul || echo %~fF

Используя пакетный скрипт:

@echo off
setlocal
set "myPath=C:\Users\dave\Desktop\shows"
for /r "%myPath%" /d %%F in (.) do dir /b "%%F" | findstr "^" >nul || echo %%~fF
3

Вы можете использовать PowerShell! Этот однострочник сделает свое дело:

Get-ChildItem 'C:\Users\dave\Desktop\shows' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object {$_.FullName}

Первая часть (начиная с Get-ChildItem) находит все подкаталоги этой одной папки. Вторая часть (Where-Object) фильтрует эти результаты до тех, которые не имеют никаких записей файловой системы, ни файлов, ни папок. Наконец, часть ForEach-Object выплевывает полное имя найденной папки.

Мы можем немного сжать эту строку, используя псевдонимы и сокращения:

gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}

Наконец, вы можете позвонить из партии:

powershell -command "gci -Dir -r | ? {[IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | % {$_.FullName}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .