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。。考虑到我在问题中提到的所有文件夹都只运行一个级别,不为空显然意味着甚至没有一个文件。考虑到大多数问题都发生了根本性的变化,或者包含一条注释,说明“如果有其他文件夹怎么办…”,一旦提供了答案;考虑到一些人喜欢让他们的脚本更健壮,我觉得这个问题值得一提。