Ожидание параллельных сценариев партии
У меня есть 4 пакетных файла. Я хочу запускать one.bat
и two.bat
одновременно, одновременно. После завершения этих двух пакетных файлов, three.bat
и four.bat
должны запускаться одновременно, параллельно. Я пробовал много, но мот отлично работает.
Может ли кто-нибудь помочь мне в этом?
Ответы
Ответ 1
Это легко сделать, используя упрощенную версию решения, которое я предоставил для Параллельное выполнение оболочечных процессов. Обратитесь к этому решению для объяснения того, как работает блокировка файла.
@echo off
setlocal
set "lock=%temp%\wait%random%.lock"
:: Launch one and two asynchronously, with stream 9 redirected to a lock file.
:: The lock file will remain locked until the script ends.
start "" cmd /c 9>"%lock%1" one.bat
start "" cmd /c 9>"%lock%2" two.bat
:Wait for both scripts to finish (wait until lock files are no longer locked)
1>nul 2>nul ping /n 2 ::1
for %%N in (1 2) do (
( rem
) 9>"%lock%%%N" || goto :Wait
) 2>nul
::delete the lock files
del "%lock%*"
:: Launch three and four asynchronously
start "" cmd /c three.bat
start "" cmd /c four.bat
Ответ 2
У меня была та же самая дилемма. Вот как я решил эту проблему.
Я использовал команду Tasklist для мониторинга того, работает ли процесс еще или нет:
:Loop
tasklist /fi "IMAGENAME eq <AAA>" /fi "Windowtitle eq <BBB>"|findstr /i /C:"<CCC>" >nul && (
timeout /t 3
GOTO :Loop
)
echo one.bat has stopped
pause
Вам нужно настроить
<AAA>, <BBB>, <CCC>
в script, чтобы он правильно фильтровал ваш процесс.
Надеюсь, что это поможет.
Ответ 3
Создайте файл master.bat, который запустит one.bat и two.bat. Когда one.bat и two.bat заканчиваются правильно, они эхо в файл, который они закончили.
if errorlevel 0 echo ok>c:\temp\OKONE
if errorlevel 0 echo ok>c:\temp\OKTWO
Затем master.bat ждет существование двух файлов
del c:\temp\OKONE
del c:\temp\OKTWO
start one.bat
start two.bat
:waitloop
if not exist c:\temp\OKONE (
sleep 5
goto waitloop
)
if not exist c:\temp\OKTWO (
sleep 5
goto waitloop
)
start three.bat
start four.bat
Другой способ - попробовать флаг /WAIT
start /WAIT one.bat
start /WAIT two.bat
но у вас нет контроля над ошибками.
Здесь некоторые ссылки
http://malektips.com/xp_dos_0002.html
http://ss64.com/nt/sleep.html
http://ss64.com/nt/start.html