Пакетный файл Windows с циклом через подпапки
Мне не удалось написать пакетный файл с благодарностью, и я был бы признателен за помощь.
Допустим, у меня есть исполняемый файл в D: \ Test \ с именем script.exe. Для выполнения этого script.exe требуется дополнительный аргумент.bin-файлов (например, bin01.bin, bin02.bin).
Поэтому это будет выглядеть так: script.exe -i bin01.bin, script.exe -i bin01
Я хочу, чтобы скрипт выполнялся со всеми.bin-файлами из всех подпапок
D: \ Test \ script.exe
D:\Test\Folder01 \ bin01.bin
D:\Test\Folder01 \ bin02.bin
D:\Test\Folder02 \ bin01.bin
D:\Test\Folder03\bin01.bin
кто-нибудь может помочь мне здесь? Заранее большое спасибо.
1 ответ
Для непосредственного выполнения из окна командной строки:
for /R "D:\Test" %I in (*.bin) do @D:\Test\script.exe -i "%I"
И та же самая командная строка для использования в командном файле:
@for /R "D:\Test" %%I in (*.bin) do @D:\Test\script.exe -i "%%I"
Команда FOR ищет рекурсив в каталоге D:\Test
и все подкаталоги для файлов, соответствующих шаблону подстановки *.bin
,
Каждому найденному файлу присваивается полный путь к переменной цикла с учетом регистра I
,
FOR выполняет для каждого файла исполняемый файл D:\Test\script.exe
с первым аргументом -i
и второй аргумент - имя найденного файла с полным путем, заключенным в двойные кавычки, для работы с любым именем файла *.bin, даже с пробелом или одним из следующих символов: &()[]{}^=;!'+,`~
,
@
в начале всей командной строки FOR просто говорит интерпретатор команд Windows cmd.exe
не выводить командную строку после предварительной обработки перед выполнением в окне консоли, как по умолчанию.
@
в начале D:\Test\script.exe
избегает вывода этой команды на консоль, выполняемой на каждой итерации цикла.
Чаще всего эхо командной строки перед выполнением отключается в начале командного файла с помощью @echo off
как это видно ниже.
@echo off
for /R "D:\Test" %%I in (*.bin) do D:\Test\script.exe -i "%%I"
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
for /?