The Sleep/Wait Command is a very useful command that is used to pause for a set amount of time while a batch script is being executed. To put it another way, this command makes it easier to run a command for a set amount of time.
Table of Contents
You may find yourself in a situation where you want to run a series of command lines one after the other, but with a time delay between them. In this case, the sleep command will come in handy. This article will show you how to use the sleep command in Windows batch scripts.
Using timeout to achieve sleep function
timeout is an old Windows command introduced in Windows 2000 that is used to add a delay between two tasks.
||Specify the number of seconds to wait (between -1 and 99999) before the command processor continues processing. When you enter the value -1, the computer will wait indefinitely for a keystroke. Also, a number of seconds in a nonwhole number like 1.5 is not accepted.|
|/nobreak||Specifies to ignore user keystrokes. But accepts CTRL + C strokes which directly terminate the batch.|
|/?||Displays help at the command prompt.|
Example1: Basic timeout in Batch Script
We have two tasks here, and we have inserted a timeout script that waits for 10 seconds for the First Task to complete before starting the Second Task.
Drawback: This will show unnecessary "Waiting for 0 seconds, press a key to continue..." and when you press any key it will continue to the next task. It is a good way of letting the user know the safe escape route to skip sleep.
Example2: Timeout with only CTRL + C key to Skip
Here, /nobreak does not allow to break or skip sleep with any key. But pressing the CTRL + C key combination will force to close the batch processing and close the program immediately.
Example 3: Sleep without timeout message
Appending >nul part so that command does not display output anything to screen. It suppresses the countdown time.
Another best use case of the timeout is as follows:
This will open the calculator, then wait 5 seconds before opening the notepad. Remember to include and && between each block. You can continue to cascade it like shown below
This will open the calculator, then wait 3 seconds for the notepad to open, then wait 4 seconds for the registry editor to open.
Drawbacks of TIMEOUT
Here are some drawbacks of timeout :
- Cannot perform delay in a fraction of a second. ie. like timeout /t 0.5 does not work. And will give
an error message stating "Error: Invalid value for timeout (/T) specified. The valid range is -1 to 99999)
- Cannot use a second value greater than 99999
Using Ping to Delay to achieve sleep function
Ping is actually used to determine whether or not a resource responds to a request. Ping sends a request to the resource and waits one second for a response. As a result, it is useful to use it as a delay function. Even if it waits for one second, it may receive a response in a few milliseconds. However, as soon as you ping the last packet here in the tenth request, it will automatically stop.
The resource we are pinging here is localhost, which is a local loopback, and it responds instantly within a millisecond but must wait 1 second each. And here in the example, we are waiting for nearly 10 seconds before executing the next line.
Using Ping to Delay with nonexisting IP
Here waiting for 10 seconds. Here we must ping to a non-existing IP address and if it exists it will not work. -w indicates waiting and here it waits for 10000 ms, you can change this value. And by default ping will request 4 times to the resource. Here, -n 1 indicates request only 1 time.
Using Ping to Delay in less than 1 second.
Just replace 10000ms with anything smaller than 1000ms. like 500ms as shown below
Using Powershell in Command to delay
Simply follow the simple example below if you want to use Powershell commands from the command line:
type this command in the command line or batch file. This command will hold the screen for 5 seconds. You can change it from 5 to any number. This can be useful if a Windows command fails or has an issue.
Using Powershell in Sleep Start Command to delay
Alternatively, you can sleep-start command of Powershell in CMD as below:
powershell -ExecutionPolicy Bypass -Command "Start-Sleep -Seconds 5"
The above command will wait for 5 seconds. Note that: Method 5 is a short form of method 6
powershell -ExecutionPolicy Bypass -Command "Start-Sleep -MilliSeconds 500"
The above command will wait for 500 milliseconds.
Using the Mshta command
Mshta.exe is a native Windows binary that was developed specifically for the purpose of executing Microsoft HTML Application (HTA) files.Mshta is able to run code written in Windows Script Host (VBScript and JScript) that is embedded into HTML in a manner that is aware of network proxies.
Waitfor.exe is a small utility that is included with Windows 7 and later versions. This program is designed to listen for and respond to a named signal. Visit here for more info.
There is no sleep and wait for command in the windows version. The best alternative is the Timeout command as explained above. In Linux, you can simply use: sleep n in the terminal where n is time in seconds.
A simple way to do this in a batch file before and after the task you want to sleep or hold is as follows:
timeout /t 5 /nobreak >nul