Статья описывает шесть способов организации командном файле 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 секунд надо запустить
sleep.exe 10
а для задержки 500 мс надо написать
sleep.exe -m 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
Время можно задавать только в секундах.

Плюсы программы — отображение информации для пользователя, чтобы он понимал, что происходит сейчас в bat файле, возможность продолжения работы bat файла как по времени, так и по клавише.
Скрипт PowerShell
Функция Start-Sleep приостанавливает действие в скрипте или сеансе на указанное время, например, задержка 10 секунд:
powershell start-sleep -seconds 10
Программа nhmb
Программа nhmb имеет встроенный таймер и используется в bat файлах для создания задержки:
nhmb.exe "Ошибка подключения к серверу.\nСервер на найден" "Резервное копирование" "Question|RetryCancel" "30"
Программ nhmb выводит окно сообщения MessageBox с таймером в заголовке, чтобы пользователь мог понять, что сейчас идёт задержка перед следующей операцией и мог повлиять на ход выполнения:

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

Ответ зависит от задачи:
- Если требуется просто остановить выполнение bat файла на несколько секунд без вывода информации пользователю и без ожидания действий с его стороны, то наилучший вариант – старый добрый способ на основе ping, потому что работает везде, прост в использовании и не требует дополнительных файлов.
- Если требуется сделать задержку с выводом информации в окне командной строки, то лучше подходит timeout.exe – показывает оставшееся время, работает в современных версиях Windows и не требует дополнительных файлов.
- Если пауза нужна с выводом информации пользователю в диалоговом окне Message Box, то nhmb.exe открывает всплывающее окно с таймером в заголовке.
Узнать больше
Файлы для скачивания
Скачать bat файлы, скрипты и исполняемые файлы, описанные в этой статье (программы nhts и nhcolor не требуются для паузы и были добавлены для оформления вывода bat файла)
Программы
nhmb — показ всплывающего окна MessageBox с таймером обратного отсчёта
nhts – добавление даты и времени к тексту
nhcolor – выделение части текста цветом