Batch file Windows-列出文件夹中的所有非空目录并写入文件
我找到了查找所有空目录的答案。我想做相反的事情,在文件夹中查找并列出非空目录。文件夹只会深入一层Batch file Windows-列出文件夹中的所有非空目录并写入文件,batch-file,cmd,Batch File,Cmd,我找到了查找所有空目录的答案。我想做相反的事情,在文件夹中查找并列出非空目录。文件夹只会深入一层 @echo off for /d /r %1 %%A in (.) do ( dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA ) 如何修改上述行以查找非空文件夹?只需使用非零的计数识别目录即可。使用-Directory开关将需要PowerShell 3.0或更高版本 @ECHO OFF powershell -NoP
@echo off
for /d /r %1 %%A in (.) do (
dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
)
如何修改上述行以查找非空文件夹?只需使用非零的
计数识别目录即可。使用-Directory
开关将需要PowerShell 3.0或更高版本
@ECHO OFF
powershell -NoProfile -Command ^
"(Get-ChildItem -Directory |" ^
"ForEach-Object { if ((Get-ChildItem $_).Count -ne 0) { $_.Name } })"
用法:
C:>CALL get-nonemptydirs.bat
d2
junk
others
t t t
xxx
在您的特定情况下,您可以使用Where.exe
,(Vista+),而不是使用Dir
,它有一个方便的/Q
选项(在命令提示下输入Where/?
,以获取使用信息)
从cmd.exe:
对于(*)中的/D%A执行@Where/Q“%A”:*>Nul&&Echo%A
从批处理文件:
@For/D%%A In(*)Do@Where/Q%%A:*>Nul&&Echo%%A
相反,只要稍作更改,您就可以报告没有文件的情况:
从cmd.exe:
For/D%A In(*)Do@Where/Q“%A”:*>Nul | | Echo%A
从批处理文件:
@For/D%%A In(*)Do@Where/Q%%A:*>Nul | | Echo%%A
在上述示例中,如果括号之间的字符串包含路径,例如MyFolder\*
,“C:\Some Location\*
或。\RelPath\*
如果您希望输出只是目录名,您可以选择使用Echo%~nxA
/Echo%%~nxA
。下面是一个简单的PowerShell脚本,它将查找目录中包含内容的所有目录:
((Get-ChildItem -Directory -Path "C:\PATH-TO-FOLDER" | Where {$_.PSIsContainer -eq $True}) | Where {$_.GetFiles().Count -ne 0} | select FullName).FullName
如果要将结果写入文件,只需在末尾附加以下内容:
| out-file -FilePath "C:\PATH-TO-OUTFILE\FILE.txt"
完整脚本:
((Get-ChildItem -Directory -Path "C:\PATH-TO-FOLDER" | Where {$_.PSIsContainer -eq $True}) | Where {$_.GetFiles().Count -ne 0} | select FullName).FullName | Out-File -FilePath "C:\PATH-TO-OUTFILE\FILE.txt"
您应该定义您认为是非空目录的内容;保存顶级文件的人;一个在任何级别上保存文件的人,或者一个在任何级别上保存文件或目录的人(我的定义)。Compo是对的,我不能重现你关于his=我的定义的问题;无论如何,您应该将%1
更改为“%~1”
,以避免包含空格的路径出现问题…@Compo。。考虑到我在问题中提到的所有文件夹都只运行一个级别,不为空显然意味着甚至没有一个文件。考虑到大多数问题都发生了根本性的变化,或者包含一条注释,说明“如果有其他文件夹怎么办…”,一旦提供了答案;考虑到一些人喜欢让他们的脚本更健壮,我觉得这个问题值得一提。