How to wait all batch files to finish before exiting? How to wait all batch files to finish before exiting? windows windows

How to wait all batch files to finish before exiting?


I think this is the simplest and most efficient way:

@echo offecho %time%(    start call batch1.bat    start call batch2.bat    start call batch3.bat    start call batch4.bat) | set /P "="echo %time%

In this method the waiting state in the main file is event driven, so it does not consume any CPU time!

EDIT: Some explanations added

The set /P command would terminate when anyone of the commands in the ( block ) outputs a line, but start commands don't show any line in this cmd.exe. This way, set /P keeps waiting for input until all processes started by start commands ends. At that point the pipe line associated to the ( block ) is closed, so the set /P Stdin is closed and set /P command is terminated by the OS.


give a unique title string to the new processes, then check if any processes with this string in the title are running:

start "+++batch+++" batch1.batstart "+++batch+++" batch2.batstart "+++batch+++" batch3.batstart "+++batch+++" batch4.bat:loop  timeout /t 1 >nul  tasklist /fi "windowtitle eq +++batch+++*" |find "cmd.exe" >nul && goto :loopecho all tasks finished

(find is used, because tasklist does not return a helpful errorlevel)


Give this a try.

@echo offecho %time%start "" /wait cmd /c bat1.bat |start "" /wait cmd /c bat2.bat |start "" /wait cmd /c bat3.batecho %time%pause