1

Допустим, у меня есть каталог под названием 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 ответ1

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .