如何使用批处理脚本查找所有空目录?
我的桌面上有一个名为“shows”的文件夹。里面有许多子目录。有些目录是空的,有些目录里有一些文件。
我如何循环遍历所有子文件夹并打印所有空文件夹?
以下是我尝试过的方法。问题是它会打印出所有文件夹...即使子文件夹不为空。
@echo off
SET "MYPATH=C:\Users\dave\Desktop\shows"
for /d %%a in ("%mypath%\*") do (
dir /b /s "%MYPATH%"
pause
)
pause
答案1
这是一种方法。
从命令行:
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
答案2
你可以使用 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}"