Windows-列出文件夹中的所有非空目录并写入文件

时间:2018-08-23 02:02:37

标签: batch-file cmd

我找到了找到所有空目录的答案。我想做相反的查找和列出文件夹中的非空目录。文件夹仅深入一层。

@echo off
for /d /r %1 %%A in (.) do (
  dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
)

如何修改以上行以查找非空文件夹?

3 个答案:

答案 0 :(得分:0)

仅使用非零的Count标识目录。使用-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

答案 1 :(得分:0)

在您的特定情况下,可以使用{em>(Vista +) Dir,而不使用Where.exe,它具有方便的/Q选项, (在命令提示符处输入Where /?以获得使用信息)

来自cmd.exe:

For /D %A In (*) Do @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

答案 2 :(得分:0)

这是一个简单的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"