如何在CMD中在目录的每个文件夹中递归创建子文件夹

如何在CMD中在目录的每个文件夹中递归创建子文件夹

假设我有一个名为的目录,Grandparent
此目录内有多个其他文件夹,,Parent 1等等。我的目标是在每个文件夹中Parent 2创建一个新文件夹。ChildParent

例如我所拥有的:

Grandparent/
    Parent1/
    Parent2/
    ...
    ...
    ParentX/

我想要的是:

Grandparent/
    Parent1/
        Child/
    Parent2/
        Child/
    ...
    ...
    ParentX/
        Child/

有没有办法在 CMD 中执行此操作?(注意:我无法下载 Powershell 或任何其他可以让我的生活更轻松的便捷工具,我只能使用默认的 Windows 命令提示符)

更新

根据评论中的链接,我尝试了以下操作:

for /r %%a in (.) do (
  rem enter the directory
  pushd %%a
  echo In Directory:
  mkdir testFolder
  cd
  rem leave the directory
  popd
)

但是,这会testFolder每一个新创建的文件夹:

Grandparent/
    Parent1/
        Child/
            Child/
                Child/
                    ...
    Parent2/
        Child/
            Child/
                Child/
                    ...
    ...
    ...
    ParentX/
        Child/
            Child/
                Child/
                    ...
    Child/
        Child/
            Child/
                ...

答案1

但是,这会在每个新创建的文件夹中创建文件夹 testFolder

这是因为for /r每次创建新目录时,该命令都会更新要处理的文件列表,因此只有当您想要访问固定的目录列表时它才真正有用。

这是一个批处理文件 (test.cmd),可以执行您想要的操作。将其放在目录中Grandparent

测试.cmd:

@echo off
setlocal
for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do (
  rem enter the directory
  pushd %%a
  echo In Directory: %%a
  md child
  rem leave the directory
  popd
  )
endlocal

笔记:

  • dir /b /a:d只评估一次,因此目录列表是固定的
  • for /f将循环遍历该固定列表一次。

示例输出:

> test
In Directory: Documentation
In Directory: subdir
In Directory: test
In Directory: test with space
In Directory: test1

> dir /b /a:d /s child
F:\test\Documentation\child
F:\test\subdir\child
F:\test\test\child
F:\test\test with space\child
F:\test\test1\child

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 目录- 显示文件和子文件夹的列表。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • MD- 创建目录 - 创建一个新文件夹。
  • - 更改当前目录/文件夹并存储前一个文件夹/路径以供 POPD 命令使用。
  • 弹出- 将目录更改回 PUSHD 命令最近存储的路径/文件夹。

相关内容