【问题标题】:Get a list of folders that contain at least one file获取至少包含一个文件的文件夹列表
【发布时间】:2020-12-28 15:14:15
【问题描述】:

有一个目录结构,我需要从中列出所有文件夹,其中至少包含一个文件。所以当一个文件夹只包含子文件夹时,它不应该被列出。 我为此尝试了以下命令,但两者都列出了没有任何文件的目录。

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

【问题讨论】:

  • 包含非空子文件夹的文件夹怎么办?它不包含文件,仅包含文件夹,但其中一个或多个子文件夹可能包含文件。根据您的描述,它不应​​该被列出。对吗?
  • @Stephan :不,也应该列出。之后,这些路径将作为文件处理应用程序的输入。谢谢,你提到了这个案例!

标签: windows cmd command-prompt directory-structure


【解决方案1】:

使用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)

【讨论】:

  • 谢谢,但它的输出与我之前得到的几乎相同,无论哪种方式我都改变了它的一部分。仅包含子文件夹的文件夹出现在输出中。
  • 输出非常不同。您注意到输出中的-+ 了吗?只需删除您不想要的 echo 部分。 (当我正确理解您的问题时,请从另一个回显中删除 || echo - %~fa+)。
  • 我看到并尝试过,但该列表还包含没有任何文件的文件夹。
  • 它不适合我。能给我看看么? (将您的输出编辑到我的答案或您的问题中(可能也是tree /f 的输出) - 在评论中将无法阅读)
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 2019-05-12
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多