Дождитесь окончания команд - PullRequest
5 голосов
/ 04 августа 2011

У меня есть пакетный файл Windows, который запускает другие пакетные файлы.Как мне дождаться завершения всех других пакетных файлов, прежде чем выполнить что-либо в первом пакете?Я не могу использовать / ждать, потому что мне нужно, чтобы другие команды выполнялись параллельно.

Ответы [ 2 ]

8 голосов
/ 05 августа 2011

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

Первый пакетный файл создает Flagfile.1 при вводе и удаляет его до конца, а также остальные параллельные пакетные файлы (Flagfile.2, ...)

Основной файл просто должен дождаться исчезновения всех файлов флагов. Например, в основном файле:

start Batch1
start Batch2
.....
:wait
if exist flagfile.* goto wait

В любом пакетном файле, например, Batch1:

echo %time% > flagfile.1
echo Do my process...
del flagfile.1
exit
1 голос
/ 05 августа 2011

Я предлагаю использовать команду CALL.Пример из Пакетные файлы :

Листинг Batch1.bat:

REM Batch1.bat
SET ABC=1
CALL BATCH2.BAT %ABC%
ECHO ABC = %ABC%
BATCH2.BAT %ABC%
ECHO ABC = %ABC%

, где листинг Batch2.bat:

REM Batch2.bat
SET ABC=%ABC%%1

РЕДАКТИРОВАТЬ: на основе отзывов @Andriy M, вот улучшенная версия для двух партий:

Партия 1:

@ECHO OFF
REM Batch1.bat
SET ABC=1
CALL batch2.bat %ABC%
ECHO 1. ABC = %ABC%
CALL batch2.bat %ABC% REM test this line with CALL and without
ECHO 2. ABC = %ABC%

Партия 2:

@ECHO OFF
REM Batch2.bat
SET tmout=5
echo sleeping %tmout% seconds...
REM this introduces a timeout by using a nonexistent ip address
PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
echo done sleeping
SET ABC=%ABC%%1

Смотрите строку в batch1, где я написал комментарий протестируйте эту строку с CALL и без .Запустите этот пакет дважды, с этой строкой, имеющей CALL и без CALL.

Вывод с консоли без CALL:

C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping

А теперьвывод с консоли с CALL:

C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
2. ABC = 1111

Обратите внимание на разницу: мы получаем 2-е эхо, qed

...