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