Пакетная обработка всех файлов в каталоге - PullRequest
10 голосов
/ 13 апреля 2011

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

Ex:

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

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

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

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

Ответы [ 3 ]

30 голосов
/ 13 апреля 2011
pushd C:\test\utils
for %%F in (F:\DB\*.xml) do (
   admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123
)
popd

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

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

7 голосов
/ 13 апреля 2011

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

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

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

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

0 голосов
/ 13 апреля 2011
for file in f:\DB\*
do
   admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...