How do you wait on a Task Scheduler task to finish in a batch file or C#? How do you wait on a Task Scheduler task to finish in a batch file or C#? azure azure

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