Пакетная обработка всех файлов в каталоге
Сейчас у меня есть пакетное задание, которое я написал, которое вызывает другой файл и передает переменные, которые необходимо выполнить исполняемому файлу (пароль и имя файла).
Пример:
> 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