【问题标题】:How to grab the names of all sub-folders in a batch script?如何在批处理脚本中获取所有子文件夹的名称?
【发布时间】:2009-09-28 14:02:33
【问题描述】:

我只想知道如何获取当前目录中所有文件夹的名称。例如,在我当前的目录中,我有三个文件夹:

堆栈溢出 红迪网 编码恐怖

然后当我执行我的批处理脚本时,所有三个文件夹都会打印在屏幕上。

我怎样才能做到这一点?

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    使用批处理文件:

    for /d %%d in (*.*) do echo %%d
    

    如果您想在命令行上进行测试,请在两种情况下仅使用一个 % 符号。

    【讨论】:

    • "for /d %%d in (.) do @echo %%d" 更漂亮。
    • 你的意思是for /d %%d in (*) do @echo %%d
    • @Helen:是的,星号显然被吞了。
    • 他们造成了一个斜体点 :-) 你必须将你的代码包含在 ` :-)
    【解决方案2】:

    在 Windows 上,您可以使用:

    dir /ad /b
    

    /ad 只会为您提供目录
    /b 将以“裸”格式显示它

    编辑(回复评论):

    如果您想遍历这些目录并对其进行处理,请使用for 命令:

    for /F "delims=" %%a in ('dir /ad /b') do (
       echo %%a
    )
    
    • 注意双% - 这是用于批处理,如果您在命令行上使用,请使用单个%
    • 针对@Helen 的评论添加了默认空格分隔符的重置

    【讨论】:

    • 您忘记使用“delims=" 来处理名称中包含空格的文件夹。
    【解决方案3】:

    使用 PowerShell:

    gci | ? { $_.PSIsContainer }
    

    旧答案:

    使用 PowerShell:

    gci | ? {$_.Length -eq $null } | % { $_.Name }
    

    您可以将结果用作脚本中的数组,然后通过它进行 foreach 或任何您想做的事情...

    【讨论】:

    • 或者您可以使用 {$_.Mode -like "d*" } 代替 Length 的东西进行过滤。我相信 PowerShell 专家会阅读此内容并向我们展示正确的解决方案。
    • gci | ?{$_.PSIsContainer} 实际上是规范的方式。
    • 另外,除非绝对必要,否则请不要将对象简化为字符串。在大多数情况下,这弊大于利。
    • 好点,虽然 sasayins 描述的输出只有目录名称。
    【解决方案4】:

    获取特定目录的所有子文件夹并在 CMD 中显示:

    @echo off
    dir C:\input /s /b /o:n /a:d
    Pause&Exit
    

    获取特定目录的所有子文件夹并将其保存在文本文件中:

    dir C:\your_directory /s /b /o:n /a:d > output.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2018-12-23
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      相关资源
      最近更新 更多