问题描述
有一个目录结构,我需要从中列出所有文件夹,其中至少包含一个文件。因此,当文件夹仅包含子文件夹时,不应列出该文件夹。 我尝试执行以下命令,但是两者都列出了没有任何文件的目录。
dir /s /b /o:n /ad > f.txt
for /r %a in (.) do @if exist "%~fa\*.*" echo %~fa >> f2.txt
更新: 我也尝试了以下命令:
for /r /d %a in (.) do @(dir /s /b /a-d "%a\*" >nul 2>&1 && echo %~fa)
文件夹结构:
C:.
└───T1
├───T2
└───T3
test.txt
命令输出:
C:\_privat\teszt
C:\_privat\teszt\T1
C:\_privat\teszt\T1\T3
预期输出:
C:\_privat\teszt\T1\T3
解决方法
使用for
开关/D
仅处理文件夹(这样可以更快)。使用dir /s /a-d
仅列出该文件夹及其下方的文件。跳过输出(我们不需要),并根据成功(未找到文件)或失败(至少找到一个文件)回显。
这是一个通用代码(以显示所有可能性),只需删除不需要的部分即可:
for /r /d %a in (.) do @(dir /s /b /a-d "%a\*" >nul 2>&1 && echo + %~fa || echo - %~fa)