Waiting for parallel batch scripts
Solution 1
This is easily done using a much simplified version of a solution I provided for Parallel execution of shell processes. Refer to that solution for an explanation of how the file locking works.
@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
Solution 2
I had this same dilemma. Here's the way I solved this issue. I used the Tasklist command to monitor whether the process is still running or not:
: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
You'll need to tweak the
<AAA>, <BBB>, <CCC>
values in the script so that it's correctly filtering for your process.
Hope that helps.
Solution 3
Create a master.bat file that starts one.bat and two.bat. When one.bat and two.bat end correctly, they echo to file they have finished
if errorlevel 0 echo ok>c:\temp\OKONE
if errorlevel 0 echo ok>c:\temp\OKTWO
Then the master.bat wait for the existence of the two files
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
Another way is to try with the /WAIT flag
start /WAIT one.bat
start /WAIT two.bat
but you don't have any control on errors.
Here's some references
http://malektips.com/xp_dos_0002.html
Solution 4
Just adding another way, maybe the shortest.
(one.cmd | two.cmd) && (three.cmd | four.cmd)
Concept is really straight forward. Start one and 2 in paralel, once done and errorlevel
is 0
run three and four.
Related videos on Youtube
sudhakar m
Updated on June 17, 2022Comments
-
sudhakar m almost 2 years
I have 4 batch files. I want to run
one.bat
andtwo.bat
at once, concurrently. After completion of these two batch files,three.bat
andfour.bat
should run at once, in parallel. I tried with many ways but mot works fine.Can anyone help me over this?
-
James K over 11 years
start /WAIT xxx
waits for xxx to finish before letting execution pass to the next line in the batch file. Soone.bat
would have to finish beforetwo.bat
could even start. You COULD assume thatone.bat
will always finish first and usestart /wait two.bat
, but that's quite an assumption. BTW, you don't have tostart four.bat
, you could justcall four.bat
, (or even leave off thecall
if nothing else is to be done after executingfour.bat
) and save the memory that would be used by launching another command processor. -
Parag Doke over 11 yearsMarked as useful for the approach shared before the mention of start /WAIT. Also make sure you delete those files from master.bat before you start one.bat and two.bat.
-
Alessandro Da Rugna over 11 yearsThank you for the suggestion, edited the post accordingly :-)
-
Future about 9 yearsexactly what i need. Thank you!
-
macetw over 8 yearsThis worked great for my needs. Thank you! What I also needed was to ensure those commands ran with success. So it looks more like: start "" 9>"%lock%1" CMD /C "one.bat > one-log.txt 2>&1 && echo success > one-success.txt" ... then, ensure that each -success.txt file exists, and type the output from each -log.txt.
-
SketchBookGames over 7 years@macetw i would like to see your solution that checks for success in a code block so that it is readable. Could you edit the answer above or submit your code block as an answer?
-
phuclv about 7 yearsto wait you can use
1>nul 2>nul timeout 1
instead of ping -
dbenham about 7 years@LưuVĩnhPhúc - Absolutely, though you might want to also throw in the
/nobreak
option. However, TIMEOUT is not available to XP, and that had a significant market share when this answer was written. Thankfully, XP is becoming less and less prevalent now that it is no longer supported. -
phonetagger almost 7 yearsRegarding your wait line:
1>nul 2>nul ping /n 2 ::1
What does the::1
do? -
phuclv over 6 years@phonetagger that's the IPv6 loopback address