Задержка в командной строке windows


Download Article


Download Article

If you need some extra time for a command in your batch file to execute, there are several easy ways to delay a batch file. While the well-known sleep command from older versions of Windows is not available in Windows 10 or 11, you can use the timeout, pause, ping, and choice commands to wait a specific number of seconds or simply pause until the user presses a key. This wikiHow article will teach you 5 simple ways to delay the next command in your batch file on any version of Windows.

Things You Should Know

  • The timeout command lets you pause for specific number of seconds, until a user presses a key, or indefinitely.
  • Use the pause command to delay the batch file until a user presses any key, or the choice command to give the user options to choose from.
  • You can hide on-screen messages that indicate delay to the user by adding >nul to the end of the timeout, ping, and choice commands.
  1. Image titled Delay a Batch File Step 1

    Use the timeout command to specify the delay time in seconds. By inserting the timeout command into your batch file, you can prompt the batch file to wait a specified number of seconds (or for a key press) before proceeding.[1]
    This command is available on all modern versions of windows, including Windows 10.

    • timeout /t <timeoutinseconds> [/nobreak].[2]
    • To pause for 30 seconds and prevent the user from interrupting the pause with a keystroke, you’d enter timeout /t 30 /nobreak.[3]

      • The user will see Waiting for 30 seconds, press CTRL+C to quit …
    • To delay 100 seconds and allow the user to interrupt the delay, you’d use timeout /t 100.
      • The user will see Waiting for 100 seconds, press a key to continue …
    • To delay indefinitely until a user enters a keystroke, use timeout /t -1.
      • The user will see Press any key to continue …
    • If you don’t want to display a message to the user during the delay, add >nul to the end of your timeout command.
  2. Advertisement

  1. Image titled Delay a Batch File Step 2

    Use the pause command to suspend the batch file until a user presses a key. This simple command doesn’t require any flags and you can place it anywhere in your script to prevent further action. When the pause command runs in the batch file, the user will see Press any key to continue . . . on a new line. When the user presses a key, the script continues.[4]

    • You might use pause right before a section of the batch file that you might not want to process, or before providing instructions to the user to insert a disk before continuing.[5]
    • At the pause, you can stop the batch program completely by pressing Ctrl + C and then Y.
  1. Image titled Delay a Batch File Step 3

    Use ping to delay the next command in the script until a ping is complete. You can add a ping anywhere in your batch file, enter any hostname or IP address (including a nonexistent address), and specify the time in milliseconds to delay the next command. You’ll also be able to hide the output of the ping so the user won’t see what’s happening in the background.[6]

    • ping /n 1 /w <timeout in milliseconds> localhost >nul

      • Ping has many more available flags, but for the purpose of delaying a batch file, you’ll only need to use a few. In this case, we’ll ping ourselves by using localhost as our destination.
      • To pause quietly for 10 seconds, you’d use ping /n 1 /w 10000 localhost >nul
  2. Advertisement

  1. Image titled Delay a Batch File Step 4

    Use the choice command to delay until a user selects an option from a list. You can customize the list of choices, use the default options of Y or N, or choose not to display any choices at all and simply delay your script for a specific period of time.[7]

    • choice [/c [<choice1><choice2><…>]] [/n] [/cs] [/t <seconds> /d <choice>] [/m <text>]

      • /c <choice1><choice2><…>: Specifies the choices you’d like to create, which can include a-z, A-Z, 0-9, and ASCII characters 128-254.
      • /t <seconds>: Use this flag to specify how many seconds to wait before the default choice is selected. You can set this value to any number between 0 (which instantly selects the default choice) and 9999.
      • /d <choice>: Specifies the default choice from the list of choices created with /c.
      • /n (optional): hides the list of choices, but still allows the user to select one.
      • /m <text> (optional): displays a message before the choice list. If you don’t include this flag but don’t hide the choice list, the choices will still be displayed.
      • /cs (optional): This specifies that choices are case-sensitive, which is important if you want to assign different functions to capital and lowercase letters.
    • To create a delay with CHOICE without displaying a message or forcing the user to choose something, use rem | choice /c:AB /T:A,30 >nul. This command simply delays the batch file for 30 seconds (similar to using Timeout with no message), provides no choices to the user, and continues after the delay. You can replace 30 with any value up to 9999 (in seconds).
  1. Image titled Delay a Batch File Step 5

    If you’re using Windows XP or earlier, you can use sleep to specify a wait time in seconds. This command will not work in any newer versions of Windows starting with Windows Vista, but is the easiest way to add wait time to batch files running on older systems.

    • sleep <seconds>
    • The sleep command only requires the number of seconds you want to delay the batch file. For example, to wait 30 seconds before continuing, you’d use sleep 30.
  2. Advertisement

Add New Question

  • Question

    How do I not get a message when I use timeout?

    Community Answer

    Add the >nul qualifier, like this: timeout /t 120 >nul. This causes a 2 minute delay with no output to the screen.

  • Question

    What if the sleep command doesn’t work?

    Community Answer

    If the sleep command doesn’t work, use timeout instead.

  • Question

    What if I want to wait less than one second? I can’t just use a dot or a comma.

    Community Answer

    You can use the ping command. This command, if used with a non-existent IP address, will try to talk to a non-existent computer and give up after a specified number of milliseconds. Just multiply the number of seconds by 1000, and you’re good to go.

See more answers

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

  • You can run a batch file on any Windows computer by double-clicking it, or launch it from the command prompt.

  • The «PAUSE» command is best used in situations where you’re relying on a user to trigger the next section of the batch file, while the «TIMEOUT» command is suited to situations in which you want to allow the file to run automatically.

  • The formerly used «SLEEP» command does not work on Windows Vista or later, including Windows 10 and 11.

Thanks for submitting a tip for review!

Advertisement

About This Article

Thanks to all authors for creating a page that has been read 1,396,998 times.

Is this article up to date?

Статья описывает шесть способов организации командном файле BAT/CMD задержки, задаваемой в секундах.

Хотя чаще bat файлы выполняются полностью автоматически, в некоторых случаях может понадобиться

  • Приостановка выполнения bat файла перед повтором неудачной операции, например, подключения к сетевому диску по WebDav
  • Пауза в несколько секунд после выполнения команды, чтобы пользователь мог просмотреть результат выполнения
  • Интервал между командами, каким-то образом влияющими друг на друга

Варианты задержки в bat файле

Программа PING

Запускаю PING с нужным числом запросов (примерно 1 секунда на запрос), например, на 30 секунд:

    ping localhost -n 30 >nul

Никакой информации при этом не выводится, так как вывод перенаправлен в nul..

Преимущества: работает на всех Windows компьютеров , т.к. программа PING установлена всегда и на всех версиях.

Недостатки: время задержки кратно секунде, т.е. нельзя сделать задержку менее 1 секунды, например, в 200 или 500 мс.

Программа SLEEP.EXE из Windows Resource Kit

Консольное приложение sleep.exe входит в пакет программ Windows XP Resource Kit (или Windows 2003 Resource Kit. Из краткой справки

    sleep.exe/?
    Usage:  C:\Program Files\Windows Resource Kits\Tools\sleep.exe      time-to-sleep-in-seconds
            C:\Program Files\Windows Resource Kits\Tools\sleep.exe [-m] time-to-sleep-in-milliseconds
            C:\Program Files\Windows Resource Kits\Tools\sleep.exe [-c] commited-memory ratio (1%-100%)

Поэтому для задержки в 10 секунд надо запустить

а для задержки 500 мс надо написать

Преимущества: можно задавать задержки не только в секундах, но и в миллисекундах. Хотя необходимости в коротких задержках менее секунды у меня ни разу не возникало. Если у вас есть примеры такой задачи, напишите, пожалуйста, в комментариях.

Недостатки: SLEEP.EXE не входит в стандартный комплект Windows и может оказаться, что на целевом компьютере этого файла нет, и его надо будет распространять вместе с bat файлом.

Скрипт WSH/JScript

Создаём на JScript небольшой скрипт SLEEP.JS, использующий функцию WScript.Sleep:

var milliseconds=WScript.Arguments(0);
WScript.Sleep(milliseconds);

и вызываем его из командного файла, например, задержка 10 секунд:

cscript //nologo sleep.js 10000

или 500 мс

cscript //nologo sleep.js 500

Аналогичный скрипт можно написать на VBScript.

WScript.Sleep Wscript.Arguments(0)

Преимущества: можно задавать задержки в секундах и миллисекундах; не требуются сторонние программы.

Недостатки: требуется распространять файл скрипта вместе с bat файлом или вставлять в bat файл код для создания файла скрипта, например, так:

echo WScript.Sleep Wscript.Arguments(0) > sleep.vbs
cscript //nologo sleep.vbs 500
del sleep.vbs

Программа timeout.exe

Консольное приложение timeout.exe предустановлена в современных версиях Windows и выполняет задержку в секундах с возможностью выхода из ожидания по нажатию клавиши:

timeout /t 30

Если пауза не должна прерываться по нажатию клавиши, то надо добавить параметр /nobreak:

timeout /t 30 /nobreak

Время можно задавать только в секундах.

Пример использования программы timeout для задержки

Плюсы программы — отображение информации для пользователя, чтобы он понимал, что происходит сейчас в bat файле, возможность продолжения работы bat файла как по времени, так и по клавише.

Скрипт PowerShell

Функция Start-Sleep приостанавливает действие в скрипте или сеансе на указанное время, например, задержка 10 секунд:

powershell start-sleep -seconds 10

Программа nhmb

Программа nhmb имеет встроенный таймер и используется в bat файлах для создания задержки:

nhmb.exe "Ошибка подключения к серверу.\nСервер на найден" "Резервное копирование" "Question|RetryCancel" "30"

Программ nhmb выводит окно сообщения MessageBox с таймером в заголовке, чтобы пользователь мог понять, что сейчас идёт задержка перед следующей операцией и мог повлиять на ход выполнения:

Окно Message Box со значком вопроса и кнопками Повтор, Отмена в программе nhmb

Какой вариант выбрать?

В итоге, вариантов много, а что применять? На этой картинке показано тестирование всех вариантов:

Тестирование задержки в bat файлах

Ответ зависит от задачи:

  • Если требуется просто остановить выполнение bat файла на несколько секунд без вывода информации пользователю и без ожидания действий с его стороны, то наилучший вариант – старый добрый способ на основе ping, потому что работает везде, прост в использовании и не требует дополнительных файлов.
  • Если требуется сделать задержку с выводом информации в окне командной строки, то лучше подходит timeout.exe – показывает оставшееся время, работает в современных версиях Windows и не требует дополнительных файлов.
  • Если пауза нужна с выводом информации пользователю в диалоговом окне Message Box, то nhmb.exe открывает всплывающее окно с таймером в заголовке.

Узнать больше

Файлы для скачивания

Скачать bat файлы, скрипты и исполняемые файлы, описанные в этой статье (программы nhts и nhcolor не требуются для паузы и были добавлены для оформления вывода bat файла)

Скачать файлы Windows Server 2003 Resource Kit, Windows XP Support Tools, Windows Server 2000 Resource Kit

Программы

nhmb — показ всплывающего окна MessageBox с таймером обратного отсчёта

nhts – добавление даты и времени к тексту

nhcolor – выделение части текста цветом

Наши соцсети

This is the latest version of what I am using in practice for a ten second pause to see the output when a script finishes.

BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul

The echo done allows me to see when the script finished and the ping provides the delay. The extra @ signs mean that I see the «done» text and the waiting occurs without me being distracted by their commands.

I have tried the various solutions given here on an XP machine, since the idea was to have a batch file that would run on a variety of machines, and so I picked the XP machine as the environment likely to be the least capable.

GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul

This seemed to give a three second delay as expected. One ping attempt lasting a specified 3 seconds.

BAD> ping -n 5 192.0.2.0 > nul

This took around 10 seconds (not 5). My explanation is that there are 5 ping attempts, each about a second apart, making 4 seconds. And each ping attempt probably lasted around a second making an estimated 9 seconds in total.

BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice

Commands not available.

BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs

I tried the above too, after reading that comments could be added to BAT files by using two consecutive colons. However the software returned almost instantly. Putting the comment on its own line before the ping worked fine.

GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul

To understand better what ping does in practice, I ran

ping 192.0.2.0 -n 5 -w 5000

This took around 30 seconds, even though 5*5=25. My explanation is that there are 5 ping attempts each lasting 5 seconds, but there is about a 1 second time delay between ping attempts: there is after all little reason to expect a different result if you ping again immediately and it is better to give a network a little time to recover from whatever problem it has had.

Edit: stolen from another post, .. RFC 3330 says the IP address 192.0.2.0 should not appear on the internet, so pinging this address prevents these tests spamming anyone!
I have modified the text above accordingly!

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

  • 1 Using timeout to achieve sleep function
  • 2 Using Ping to Delay to achieve sleep function
  • 3 Using Ping to Delay with nonexisting IP
  • 4 Using Ping to Delay in less than 1 second.
  • 5 Using Powershell in Command to delay 
  • 6 Using Powershell in Sleep Start Command to delay 
  • 7 Using the Mshta command

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.

Sleep and wait

fig. Sleep and wait

📚 Note: Windows does not have a direct Sleep command as provided in Linux, we must use a different method to achieve the same result. Furthermore, no root privileges are required to implement in a batch script.

1 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.

Usage :

timeout /t [/nobreak]

Here,

/t  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.

timeout-help

fig. timeout help

Example1: Basic timeout in Batch Script

@echo off
echo First Task Here …
echo Approximately 10-second delay
timeout /t 10 
echo Second Task Here …
pause

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.

In details:

«@echo off» disables the console window command display in this Windows batch file script. After this line, console commands will not be displayed.

The terminal window will display «echo First Task Here» after the next line. Displays the provided text in the console window.

«echo About 10-second delay» informs the user of a delay in the console window.

«Timeout /t 10» will postpone script execution for 10 seconds. The console window will countdown the remaining time.

«echo Second Task Here…» will appear in the terminal window after the wait, restarting script execution.

Lastly, the «pause» command pauses script execution and displays «Press any key to resume…«, allowing the user to inspect the console window output before closing it. After «pause,» the script must be resumed by pressing any key.

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

@echo off
 …..
timeout /t 10 /nobreak
…..
pause

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

@echo off
….
timeout /t 15 /nobreak > nul
….
pause

Appending >nul part so that the command does not display output anything to the screen. It suppresses the countdown time.

Another best use case of the timeout is as follows:

calc && timeout 5 && notepad

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

calc && timeout 3 && notepad && timeout 4 && regedit

This will open the calculator, then wait 3 seconds for the notepad to open, then wait 4 seconds for the registry editor to open.

Note that: Ctrl + C will break the whole program.

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

2 Using Ping to Delay to achieve sleep function

@echo off
…..
ping localhost -n 10 > nul
…..
pause

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.

Note that: Ctrl + C will break the delay.

3 Using Ping to Delay with nonexisting IP

@echo off
….
ping 192.4.4.4 -n 1 -w 10000 > nul
….
pause

Here waiting for 10 seconds. Here we must ping 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.

4 Using Ping to Delay in less than 1 second.

Just replace 10000ms with anything smaller than 1000ms. like 500ms as shown below

ping 192.4.4.4 -n 1 -w 500 > nul

5 Using Powershell in Command to delay 

Simply follow the simple example below if you want to use Powershell commands from the command line:

Example 1

powershell -command «Please Wait for 5 second» -s 5

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.

Example 2:

powershell -nop -c «& {sleep -m 5}»

6 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.

7 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.

start "" /w /b /min mshta "javascript:setTimeout(function(){close();},5000);"

Conclusion:

To summarize, in Windows batch files, you can pause the execution of the batch file for a specified number of seconds by using the «sleep» command, and you can create a custom «wait» command by using the «timeout» command. Both of these commands can be found in the «commands» section of the batch file. While the «wait» command can be used to wait for a defined number of seconds before continuing with the next command, the «sleep» command is used to pause the execution of the batch file for a specified number of seconds at a time. You will be able to regulate the timing and flow of your batch file by using these commands, which will enable you to ensure that it runs smoothly and effectively.

FAQ:

What is the WaitFor command?

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.

Is there a command in Windows that allows you to sleep and wait?

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.

How to sleep for five seconds in a batch file?

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

Rob van der Woude's Scripting Pages

WAIT

To make a batch file wait for a number of seconds there
are several options available:

  • PAUSE
  • SLEEP
  • TIMEOUT
  • PING
  • NETSH (Windows XP/Server 2003 only)
  • CHOICE
  • CountDown
  • SystemTrayMessage
  • Other scripting languages
  • Unix ports
Note: Click a script file name to expand and view its source code; click the file name again, or the expanded source code, to hide the source code again.
To view the source code on its own, right-click the file name and choose Open or Open in separate tab or window.

PAUSE

The most obvious way to pause a batch file is of course the PAUSE command.
This will stop execution of the batch file until someone presses «any key».
Well, almost any key: Ctrl, Shift, NumLock etc. won’t work.
This is fine for interactive use, but sometimes we just want to delay the batch file for a fixed number of seconds, without user interaction.

SLEEP

SLEEP was included in some of the Windows Resource Kits.
It waits for the specified number of seconds and then exits.

SLEEP 10

will delay execution of the next command by 10 seconds.

There are lots of SLEEP clones available, including the ones mentioned in the UNIX Ports paragraph at the end of this page.

TIMEOUT

TIMEOUT was included in some of the Windows Resource Kits, but is a standard command as of Windows 7.
It waits for the specified number of seconds or a keypress, and then exits.
So, unlike SLEEP, TIMEOUT‘s delay can be «bypassed» by pressing a key.

TIMEOUT 10

or

TIMEOUT /T 10

will delay execution of the next command by 10 seconds, or until a key is pressed, whichever is shorter.

D:\>TIMEOUT /T 10

Waiting for 10 seconds, press a key to continue ...

You may not always want to abort the delay with a simple key press, in which case you can use TIMEOUT‘s optional /NOBREAK switch:

D:\>TIMEOUT /T 10 /NOBREAK

Waiting for 10 seconds, press CTRL+C to quit ...

You can still abort the delay, but this requires Ctrl+C instead of just any key, and will raise an ErrorLevel 1.

PING

For any MS-DOS or Windows version with a TCP/IP client, PING can be used to delay execution for a number of seconds.

PING localhost -n 6 >NUL

will delay execution of the next command for (a little over) 5 seconds seconds (default interval between pings is 1 second, the last ping will add only a minimal number of milliseconds to the delay).
So always specify the number of seconds + 1 for the delay.

The PING time-out technique is demonstrated in the following examples:

  PMSleep.bat for Windows NT

  1. @ECHO OFF
  2. :: Check Windows version
  3. IF NOT "%OS%"=="Windows_NT" GOTO Syntax
  4.  
  5. :: Check if a valid timeout period is specified
  6. IF     "%~1"=="" GOTO Syntax
  7. IF NOT "%~2"=="" GOTO Syntax
  8. ECHO.%*| FINDSTR /R /X /C:"[0-9][0-9]*" >NUL || GOTO Syntax
  9. IF %~1 LSS    1 GOTO Syntax
  10. IF %~1 GTR 3600 GOTO Syntax
  11.  
  12. :: Use local variable
  13. SETLOCAL
  14.  
  15. :: Add 1 second for IPv4
  16. SET /A seconds = %1 + 1
  17.  
  18. :: The actual command: try IPv4 first, if that fails try IPv6
  19. PING -n %seconds% 127.0.0.1 >NUL 2>&1 || PING -n %1 ::1 >NUL 2>&1
  20.  
  21. :: Done
  22. ENDLOCAL
  23. GOTO:EOF
  24.  
  25.  
  26. :Syntax
  27. ECHO.
  28. ECHO PMSleep.bat
  29. ECHO Poor Man's SLEEP utility,  Version 3.00 for Windows NT 4 and later.
  30. ECHO Wait for a specified number of seconds.
  31. ECHO.
  32. ECHO Usage:  CALL  PMSLEEP  seconds
  33. ECHO.
  34. ECHO Where:        seconds  is the number of seconds to wait (1..3600)
  35. ECHO.
  36. ECHO Notes:  The script uses PING for the delay, so an IP stack is required.
  37. ECHO         The delay time will not be very accurate.
  38. ECHO.
  39. ECHO Written by Rob van der Woude
  40. ECHO http://www.robvanderwoude.com
  41.  
  42. IF "%OS%"=="Windows_NT" EXIT /B 1
  43.  

  PMSlpW9x.bat for Windows 95/98

  1. @ECHO OFF
  2. :: Check if a timeout period is specified
  3. IF "%1"=="" GOTO Syntax
  4.  
  5. :: Filter out slashes, they make the IF command crash
  6. ECHO.%1 | FIND "/" >NUL
  7. IF NOT ERRORLEVEL 1 GOTO Syntax
  8.  
  9. :: Check for a non-existent IP address
  10. :: Note: this causes a small extra delay!
  11. IF "%NonExist%"=="" SET NonExist=10.255.255.254
  12. PING %NonExist% -n 1 -w 100 | FIND "TTL=" >NUL
  13. IF ERRORLEVEL 1 GOTO Delay
  14. SET NonExist=1.1.1.1
  15. PING %NonExist% -n 1 -w 100 | FIND "TTL=" >NUL
  16. IF NOT ERRORLEVEL 1 GOTO NoNonExist
  17.  
  18. :Delay
  19. :: Use PING time-outs to create the delay
  20. PING %NonExist% -n 1 -w %1000 >NUL
  21.  
  22. :: Show online help on errors
  23. IF ERRORLEVEL 1 GOTO Syntax
  24.  
  25. :: Done
  26. GOTO End
  27.  
  28. :NoNonExist
  29. ECHO.
  30. ECHO This batch file needs an invalid IP address to function
  31. ECHO correctly.
  32. ECHO Please specify an invalid IP address in an environment
  33. ECHO variable named NonExist and run this batch file again.
  34.  
  35. :Syntax
  36. ECHO.
  37. ECHO PMSlpW9x.bat
  38. ECHO Poor Man's SLEEP utility,  Version 2.10 for Windows 95 / 98
  39. ECHO Wait for a specified number of seconds.
  40. ECHO.
  41. ECHO Written by Rob van der Woude
  42. ECHO http://www.robvanderwoude.com
  43. ECHO Corrected and improved by Todd Renzema and Greg Hassler
  44. ECHO.
  45. ECHO Usage:    CALL PMSLPW9X nn
  46. ECHO.
  47. ECHO Where:    nn is the number of seconds to wait
  48. ECHO.
  49. ECHO Example:  CALL PMSLPW9X 10
  50. ECHO           will wait for 10 seconds
  51. ECHO.
  52. ECHO Note:     Due to "overhead" the actual delay may
  53. ECHO           prove to be up to a second longer
  54.  
  55. :End
  56.  

💾   Download the PMSleep sources

NETSH

NETSH may seem an unlikely choice to generate delays, but it is actually much like using PING:

NETSH Diag Ping Loopback

will ping localhost, which takes about 5 seconds — hence a 5 seconds delay.

NETSH is native in Windows XP Professional and later versions.
Unfortunately however, this trick will only work in Windows XP/Server 2003.

CHOICE

In MS-DOS 6, Windows 9*/ME and NT 4

REM | CHOICE /C:AB /T:A,10 >NUL

will add a 10 seconds delay.
By using REM | before the CHOICE command, the standard input to CHOICE is blocked, so the only «way out» for CHOICE is the time-out specified by the /T parameter.
This idea was borrowed from Laurence Soucy, I added the /C parameter to make it language independent (the simpler REM | CHOICE /T:N,10 >NUL will work in many but not all languages).

  The CHOICE delay technique is demonstrated in the following example, Wait.bat:

  1. @ECHO OFF
  2. IF "%1"=="" GOTO Syntax
  3. ECHO.
  4. ECHO Waiting %1 seconds
  5. ECHO.
  6. REM | CHOICE /C:AB /T:A,%1 > NUL
  7. IF ERRORLEVEL 255 ECHO Invalid parameter
  8. IF ERRORLEVEL 255 GOTO Syntax
  9. GOTO End
  10.  
  11. :Syntax
  12. ECHO.
  13. ECHO WAIT for a specified number of seconds
  14. ECHO.
  15. ECHO Usage:  WAIT  n
  16. ECHO.
  17. ECHO Where:  n  =  the number of seconds to wait (1 to 99)
  18. ECHO.
  19.  
  20. :End
  21.  
Note: The line ECHO Invalid parameter ends with an «invisible» BELL character, which is ASCII character 7 (beep) or ^G (Ctrl+G).

In Windows 10 the REM trick no longer works, and the default option is no longer specified with the /T switch, but with a separate /D switch:

CHOICE /C:AB /D:A /T:10 >NUL

This means that, unlike in DOS, in Windows 10 you can skip the delay by pressing one of the choices specified with the /C switch.

  The CHOICE delay technique is demonstrated in the following example, Wait.cmd:

  1. @ECHO OFF
  2. IF NOT "%OS%"=="Windows_NT" GOTO Syntax
  3. IF "%~1"=="" GOTO Syntax
  4. ECHO.
  5. ECHO Waiting %~1 seconds
  6. ECHO.
  7. CHOICE /C:AB /D:A /T:%1 > NUL
  8. IF ERRORLEVEL 255 (
  9. 	ECHO Invalid parameter
  10. 	GOTO Syntax
  11. )
  12. GOTO:EOF
  13.  
  14. :Syntax
  15. ECHO.
  16. ECHO WAIT for a specified number of seconds
  17. ECHO.
  18. ECHO Usage:  WAIT  n
  19. ECHO.
  20. ECHO Where:  n  =  the number of seconds to wait (1 to 99)
  21. ECHO.
  22. EXIT /B 1
  23.  

💾   Download the Wait.bat and Wait.cmd source code

CountDown

For longer delay times especially, it would be nice to let the user know what time is left.
That is why I wrote CountDown.exe (in C#): it will count down showing the number of seconds left.
Pressing any key will skip the remainder of the count down, allowing the batch file to continue with the next command.

You may append the counter output to a custom text, like this (@ECHO OFF required):

@ECHO OFF
SET /P \"=Remaining seconds to wait: \" < NUL
CountDown.exe 20

💾   Download CountDown.exe and its C# source code

SystemTrayMessage

SystemTrayMessage.exe is a program I wrote to display a tooltip message in the system tray’s notification area.
By default it starts displaying a tooltip which will be visible for 10 seconds (or any timeout specified), but the program will terminate immediately after starting the tooltip.
The icon will remain in the notification area after the timeout elapsed, until the mouse pointer hovers over it.
By using its optional /W switch, the program will wait for the timeout to elapse and then hide the icon before terminating.

Display a tooltip message for 60 seconds while continuing immediately:

SystemTrayMessage.exe "Your daily backup has been started" /T:"Backup Time" /V:60 /S:186
REM Insert your backup command here

Display a tooltip message and wait for 60 seconds:

SystemTrayMessage.exe "It is time for your daily backup, please save and close all documents" /T:"Backup Time" /V:60 /S:186 /W
REM Insert your backup command here

  Or more sophisticated (requires CountDown.exe too):

  1. @ECHO OFF
  2. SET Message=It is time for your daily backup.\nPlease save and close all documents,\nor press any key to skip the backup.
  3. START /B SystemTrayMessage.exe "%Message%" /T:"Backup Time" /V:20 /S:186 /W
  4. ECHO Press any key to skip the backup . . .
  5. SET /P "=Seconds to start of backup: " < NUL
  6. CountDown.exe 20
  7. IF ERRORLEVEL 2 (
  8. 	ECHO.
  9. 	ECHO Backup has been skipped . . .
  10. 	EXIT /B 1
  11. )
  12. SystemTrayMessage.exe "Your daily backup has been started" /T:"Backup Running" /V:20 /S:186
  13. REM Insert your backup command here

SystemTrayMessage screenshot

💾   Download SystemTrayMessage.exe and its C# source code

Non-DOS Scripting

  In PowerShell you can use Start-Sleep when you need a time delay.
The delay can be specified either in seconds (default) or in milliseconds.

  1. Start-Sleep -Seconds 10 # wait 10 seconds
  2. Start-Sleep 10 # wait 10 seconds
  3. Start-Sleep -Seconds 2.7 # wait 3 seconds, rounded to integer
  4. Start-Sleep -MilliSeconds 500 # wait half a second

  The following batch code uses PowerShell to generate a delay:

  1. @ECHO OFF
  2. REM %1 is the number of seconds for the delay, as specified on the command line
  3. powershell.exe -Command "Start-Sleep -Seconds %1"

  Or if you want to allow fractions of seconds:

  1. @ECHO OFF
  2. REM %1 is the number of seconds (fractions allowed) for the delay, as specified on the command line
  3. powershell.exe -Command "Start-Sleep -MilliSeconds ( 1000 * %1 )"

Note that starting PowerShell.exe in a batch file may add an extra second to the specified delay.

Use the SysSleep function whenever you need a time delay in Rexx scripts.
SysSleep is available in OS/2’s (native) RexxUtil module and in Patrick McPhee’s RegUtil module for 32-bits Windows.

Use the Sleep command for time delays in KiXtart scripts.

Use WScript.Sleep, followed by the delay in milliseconds in VBScript and JScript (unfortunately, this method is not available in HTAs).

  The following batch code uses a temporary VBScript file to generate an accurate delay:

  1. @ECHO OFF
  2. REM %1 is the number of seconds for the delay, as specified on the command line
  3. > "%Temp%.\sleep.vbs" ECHO WScript.Sleep %~1 * 1000
  4. CSCRIPT //NoLogo "%Temp%.\sleep.vbs"
  5. DEL "%Temp%.\sleep.vbs"

  Or if you want to allow the user to skip the delay:

  1. @ECHO OFF
  2. REM %1 is the number of seconds for the delay, as specified on the command line
  3. >  "%Temp%.\sleep.vbs" ECHO Set wshShell = CreateObject( "WScript.Shell" )
  4. >> "%Temp%.\sleep.vbs" ECHO ret = wshShell.Popup( "Waiting %~1 seconds", %~1, "Please Wait", vbInformation )
  5. >> "%Temp%.\sleep.vbs" ECHO Set wshShell = Nothing
  6. CSCRIPT //NoLogo "%Temp%.\sleep.vbs"
  7. DEL "%Temp%.\sleep.vbs"

UNIX Ports

Compiled versions of SLEEP are also available in these Unix ports:

  • CoreUtils for Windows
    A collection of basic file, shell and text manipulation utilities
  • GNU utilities for Win32
    Some ports of common GNU utilities to native Win32.
    In this context, native means the executables only depend on the Microsoft C-runtime (msvcrt.dll) and not an emulation layer like that provided by Cygwin tools.

page last modified: 2023-09-12

  • Задержка автозапуска программ windows 10
  • Задачник на рабочий стол windows 10
  • Задать сервер лицензирования windows server 2019
  • Задачи для файлов и папок windows 10
  • Задача в среде windows это