Пакетная обработка всех файлов в каталоге

Сейчас у меня есть пакетное задание, которое я написал, которое вызывает другой файл и передает переменные, которые необходимо выполнить исполняемому файлу (пароль и имя файла).

Пример:

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml  -Dadmin.db.password=test123

Я написал задание, которое делает это, но выяснил, что будет несколько файлов.

Имя пользователя и пароль никогда не меняются, но имя файла отличается как 15 различными xml файлами - возможно, в ближайшее время.

Файлы всегда будут находиться в одной папке. Вместо того, чтобы заканчивать как 15-20 заданий (по одному для каждого файла), могу ли я написать что-то, что будет обрабатывать каждый файл, расположенный в этом каталоге. И либо дождитесь завершения одного до следующего, либо я могу добавить 3-минутный сон, прежде чем он запустит следующий файл.

Ответ 1

pushd C:\test\utils
for %%F in (F:\DB\*.xml) do (
   admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123
)
popd

%%~dpnxF расширяется до d, p ath, base n ame и e x напряжение текущего файла.

Если вы намерены установить и использовать переменные среды (%foo%) в этом цикле, сначала прочитайте help set, прежде чем попадаете в проблему.

Ответ 2

Вы можете использовать команду for. Что-то вроде этого в пакетном файле:

for %%f in (*.xml) do call myotherbatch.bat %%f

Предполагая, что команда admin, которую вы запускаете, не возвращается, пока задание не будет завершено, вышеуказанный цикл будет обрабатывать их последовательно.

Если вы запустите команду в приглашении (в отличие от командного файла), используйте только один%.

Ответ 3

for file in f:\DB\*
do
   admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123
done