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

2481
amallard

Скажем, у меня есть каталог под названием 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
Да, но учтите, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 7 лет назад 0
[Рекурсивное посещение каталогов в дереве каталогов] (http://stackoverflow.com/documentation/batch-file/3695/for-loops-in-batch-files/12871/recursively-visit-directories-in-a-directory- дерево # т = +201703251426285361546) DavidPostill 7 лет назад 0
Что ты пробовал? покажи свой код и объясни, что с ним случилось yass 7 лет назад 0
@DavidPostill спасибо за ссылку, это отличное место для начала! amallard 7 лет назад 0
@yass Я обновил свою попытку и результат amallard 7 лет назад 0

1 ответ на вопрос

1
DavidPostill

Тем не менее, это создает папку 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.