如何在批处理脚本中获取所有子文件夹的名称?

6

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

stackoverflow
reddit
codinghorror

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

我该如何实现这一点?

4个回答

13

使用批处理文件:

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

如果你想在命令行上进行测试,请在两种情况下只使用一个百分号。


1
"for /d %%d in (.) do @echo %%d" 更美观。 - Peter Mortensen
1
你是指 for /d %%d in (*) do @echo %%d 吗? - Helen
1
@Helen:是的,星号显然被忽略了。 - Peter Mortensen
他们引起了一个斜体点 :-) 你必须用 ` 包围你的代码 :-) - Joey

8
在 Windows 上,您可以使用:
dir /ad /b

/ad 只会获取目录
/b 以“裸”格式呈现

编辑(回复评论):

如果您想遍历这些目录并对它们进行操作,请使用 for 命令:

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

你忘记了加上“delims=”来处理文件夹名称中包含空格的情况。 - Helen

2

使用PowerShell:

gci | ? { $_.PSIsContainer }

旧回答:

使用PowerShell:


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

您可以将结果作为数组在脚本中使用,然后通过foreach遍历它,或者进行任何您想要的操作...


或者你可以使用 {$_.Mode -like "d*"} 进行过滤,而不是使用 Length。我相信 PowerShell 大师会阅读这篇文章并向我们展示正确的解决方案。 - Philippe
1
gci | ?{$_.PSIsContainer} 是规范的方式,实际上。 - Joey
1
另外,请不要将对象简化为字符串,除非你绝对必须这样做。在大多数情况下,这会带来更多的伤害而不是好处。 - Joey
不错的观点,尽管sasayins所描述的输出只包括目录名称。 - Philippe

0

获取特定目录下的所有子文件夹并在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接