Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows batch: sleep [duplicate]

People also ask

How do you pause 10 seconds in a batch file?

You should use timeout /t /nobreak. How to remove the "Waiting for seconds, press ctrl+c to quit" prompt? Adding >nul to the end of the line should work. "timeout /nul" is the command you want from this answer.

How do you sleep in a batch script?

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.

What is @echo off batch?

batch-file Echo @Echo off @echo off prevents the prompt and contents of the batch file from being displayed, so that only the output is visible. The @ makes the output of the echo off command hidden as well.

Is there a sleep command in Windows?

As you might know, pressing Alt + F4 closes the current app window, just like clicking the X in the top-right corner of a program. However, if you don't have a window currently selected, you can use Alt + F4 as a shortcut for sleep in Windows 10.


You can try

ping -n XXX 127.0.0.1 >nul

where XXX is the number of seconds to wait, plus one.


I don't know why those commands are not working for you, but you can also try timeout

timeout <delay in seconds>

timeout /t 10 /nobreak > NUL

/t specifies the time to wait in seconds

/nobreak won't interrupt the timeout if you press a key (except CTRL-C)

> NUL will suppress the output of the command


To wait 10 seconds:

choice /T 10 /C X /D X /N

Microsoft has a sleep function you can call directly.

    Usage:  sleep      time-to-sleep-in-seconds
            sleep [-m] time-to-sleep-in-milliseconds
            sleep [-c] commited-memory ratio (1%-100%)

You can just say sleep 1 for example to sleep for 1 second in your batch script.

IMO Ping is a bit of a hack for this use case.


For a pure cmd.exe script, you can use this piece of code that returns the current time in hundreths of seconds.

:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

You may then use it in a wait loop like this.

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

And putting all pieces together:

@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

For a more detailed description of the commands used here, check HELP SET and HELP CALL information.