batch-fileAdd delay to Batch file

Introduction

This topic will teach you one of the many useful things to know in the scripting language, batch file; Adding a delay/pause/timeout to your batch file.

Timeout


Timeout

The simplest way to make a delay or pause for a certain amount of time, is with the standard command TIMEOUT. To make a timeout that lasts exactly one minute we type:

timeout /t 60

Now what is going on here?

First off we use the command TIMEOUT with the parameter /T (which simply means timeout) then we specify the amount of seconds to wait. In this case... 60 seconds.

Timeout with the parameter /NOBREAK

If we take the example from before and run that in a BATCH file: timeout /t 60 then while waiting those 60 seconds, you are actually able to break the timeout by pressing any key on your keyboard. To prevent this we simply add the parameter /NOBREAK to the end of it.

timeout /t 60 /nobreak

By doing this it will timeout for 60 seconds, and if you want to break the timeout you will have to press (CTRL-C) on your keyboard.

Silent timeout

When it's doing a timeout it will display:

Waiting for X seconds, press a key to continue ...
or 
Waiting for X seconds, press CTRL+C to quit ... [This is with the /NOBREAK parameter]

To hide the message use the NUL argument (For explanation of NUL: Click Here)

timeout /t 60 > nul
or
timeout /t 60 /nobreak > nul

Pause

To make your script pause simply use the PAUSE command.

PAUSE

This will display the text Press any key to continue . . ., then add a newline on user input.

Let's say we want to create a "Hello World" program and after we click something on our keyboard, we want it to exit the program with the EXIT command.

echo Hello World
pause
exit

Here it uses the ECHO command to say "Hello World". Then we use the PAUSE command which displays Press any key to continue . . . and then we use the EXIT command to terminate the current BATCH script.

When it's pausing it will display:

Press any key to continue . . .

Hide the "Press any key to continue... prompt

To hide the message we redirect the output to a special device called nul. This isn't actually a real device, but whatever we send to it is thrown away.

pause > nul

Ping


Ping

One of the most used command to delay for a certain amount of time is ping.

Basic usage

PING -n 1 -w 1000 1.1.1.1

REM the -n 1 flag means to send 1 ping request.
REM the -w 1000 means when the IP(1.1.1.1) does not respond, go to the next command
REM 1.1.1.1 is an non-existing IP so the -w flag can ping a delay and go to next command

This would output the following on your batch file/console:

C:\Foo\Bar\Baz>ping -n -w 1000 1.1.1.1

Pinging 1.1.1.1 (Using 32 bytes of data)
Request timed out

Ping statistics for 1.1.1.1
    Packets: Sent = 2,Received = 0, Lost = 1(100% loss)

Hide the text echoed out

Just add >nul at the back of the command to redirect it to null.

ping -n w 1000 1.1.1.1 >nul

This would output nothing.

Sleep


Sleep

On older Windows system, timeout is not available. However, we can use the sleep command.

Usage

sleep 1

Very self-explanatory; sleep for 1 second. However, sleep is a deperacted command and should be replaced by timeout.

Availability

This command is available on old Windows system. Also SLEEP.exe is included in 2003 Resource Kit.

To use sleep.exe, put the executable file to %Windir%\System32 folder. Then you can use it as normal command.