windows - 获取至少包含一个文件的文件夹列表
问题描述
有一个目录结构,我需要从中列出所有文件夹,其中至少包含一个文件。所以当一个文件夹只包含子文件夹时,它不应该被列出。我为此尝试了以下命令,但两者都列出了没有任何文件的目录。
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
switch/D
来处理文件夹(这使它更快)。用于dir /s /a-d
仅列出该文件夹及以下文件夹中的文件。跳过输出(我们不需要它)并根据成功(未找到文件)或失败(至少找到一个文件)来回显。
这是一个通用代码(显示所有可能性),只需删除您不需要的部分:
for /r /d %a in (.) do @(dir /s /b /a-d "%a\*" >nul 2>&1 && echo + %~fa || echo - %~fa)