批量:遍历目录并获取目录名称

批量:遍历目录并获取目录名称

给定以下目录

D:\>dir D:\test1 /b
.dir1dot
.dir2dot
dir1
dir2
file1.txt
file2.txt

我想遍历给定目录中的所有目录Windows 10。因此我创建了以下命令

D:\>for /d %i in (D:\test1\*) do @echo %i
D:\test1\.dir1dot
D:\test1\.dir2dot
D:\test1\dir1
D:\test1\dir2

现在我想获取目录的名称。即:

.dir1dot
.dir2dot
dir1
dir2

我尝试执行以下操作,但发生了以下情况:

D:\> for /d %i in (D:\test1\*) do @echo %~ni
ECHO is on.
ECHO is on.
dir1
dir2

因此,问题是我怎样才能仅显示给定目录中的目录名称?

答案1

  1. 使用%~nxi替换也包含文件扩展名,因为这会获取.名为文件夹的前缀。您仍然可以确保不会迭代任何文件,因为FOR /D只处理目录。

    for /d %i in (D:\test1\*) do @echo %~nxi
    .dir1dot
    .dir2dot
    dir1
    dir2
    

  1. 此外,您还可以使用对于/f循环迭代输出目录带有/B/AD参数的命令仅获取目录而不获取文件,并获取每次迭代的完整路径(包括.前缀名为文件夹)。

    仅限目录名称

    for /f "tokens=*" %F IN ('DIR D:\test1 /AD /B') do @echo %F
    .dir1dot
    .dir2dot
    dir1
    dir2
    

    完整路径目录名称

    for /f "tokens=*" %F IN ('DIR D:\test1 /AD /B') do @echo %~fF
    D:\test1\.dir1dot
    D:\test1\.dir2dot
    D:\test1\dir1
    D:\test1\dir2
    

支持资源

  • 对于/F
  • FOR /?

    此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:

    %~fI        - expands %I to a fully qualified path name
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    
  • 目录

答案2

电源外壳:(Get-ChildItem -directory).Name

别名/Abbv 版本:(gci -ad).Name

在此处输入图片描述

答案3

您可以在一个循环中使用和:for /Directoryfor /Recursivefor /Directory for /Recursive

为了/d /r “E:\你的文件夹”%i 在 (*)do @echo\%~nxi

相关内容