How do you wait on a Task Scheduler task to finish in a batch file or C#?
From batch file, query the task status, and if it is running, keep querying
:loopfor /f "tokens=2 delims=: " %%f in ('schtasks /query /tn yourTaskName /fo list ^| find "Status:"' ) do ( if "%%f"=="Running" ( ping -n 6 localhost >nul 2>nul goto loop ))
You can also get rid of the hacky ping -n command by using timeout
.
Here's the answer of MC ND with timeout
. The 1
in the sample stands for 1 second.
:loopfor /f "tokens=2 delims=: " %%f in ('schtasks /query /tn yourTaskName /fo list ^| find "Status:"' ) do ( if "%%f"=="Running" ( timeout /T 1 /NOBREAK > nul goto loop ))
thank you! confirmed working on windows 10 cmd file. very useful way to create multiple aysnc tasks and sync them back up. For example, chkdsk multiple drives in parallel and wait for all jobs to finish:
C:\Windows\System32\schtasks.exe /RUN /TN "chkdsk_G"C:\Windows\System32\schtasks.exe /RUN /TN "chkdsk_H":loopfor /f "tokens=2 delims=: " %%f in ('schtasks /query /tn chkdsk_G /fo list ^| find "Status:"' ) do ( if "%%f"=="Running" ( ping -n 60 localhost >nul 2>nul goto loop ))for /f "tokens=2 delims=: " %%f in ('schtasks /query /tn chkdsk_H /fo list ^| find "Status:"' ) do ( if "%%f"=="Running" ( ping -n 60 localhost >nul 2>nul goto loop )):both jobs are now complete