batch-fil - Start flere opgaver parallelt og vent på dem i Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan udfører jeg nogle opgaver parallelt i batch script og venter på dem?


command1;

# command3, command4 and command5 should execute in sequence say task1
# command6, command7 and command8 should execute in sequence say task2
# both task1 and task2 should run independently

command3; command4; command5 | command6; command7; command8;

# should execute only after the above parallel tasks are completed

command9;


Som et bevis på konceptet forsøgte jeg noget, men det virker ikke:


echo "Starting"
start /wait wait20.bat   
start /wait wait40.bat 
echo "Finishing"


wait20.bat ligner:


echo "starting 20 seconds job"
timeout 20
echo "finishing 20 seconds job"


Hvad gør jeg forkert?

Bedste reference


Jeg synes, det er den enkleste måde at gøre det på:


command1

(
   start "task1" cmd /C "command3 & command4 & command5"
   start "task2" cmd /C "command6 & command7 & command8"
) | pause

command9


Yderligere detaljer i kommentarerne under dette svar.

Andre referencer 1


Her er et eksempel på hvordan det kan gøres med opgaveliste og procesvinduetitler:


launcher.cmd


@echo off
for /l \%\%a in (1,1,5) do start "worker\%\%a" cmd /c worker.cmd & timeout /t 1 >nul
:loop
timeout /t 2 >nul
tasklist /v /fi "imagename eq cmd.exe" /fo csv | findstr /i "worker" >nul && goto :loop
echo Workers finished


worker.cmd


@echo off
set /a wait=2 + ( \%RANDOM\% \%\% 5 ) 
echo waiting for \%wait\%...
timeout /t \%wait\% >nul
echo I'm done!
timeout /t 2 >nul


Jeg bruger tasklist /v /fo csv for at få titler.