Как рекурсивно создать подпапку в каждой папке каталога в CMD

Допустим, у меня есть каталог с именем Grandparent
Внутри этого каталога несколько других папок, Parent 1, Parent 2и т. д. Моя цель - создать новую папку, Childвнутри каждого из Parent папки.

Например, что у меня есть:

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 каталог.

test.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

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • dir - Показать список файлов и подпапок.
  • for / f - Циклическая команда против результатов другой команды.
  • md - Make Directory - создает новую папку.
  • pushd - изменить текущий каталог / папку и сохранить предыдущую папку / путь для использования командой POPD.
  • popd - изменить каталог обратно на путь / папку, которая была сохранена последней командой PUSHD.
Другие вопросы по тегам