Статья описывает шесть способов организации командном файле 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

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

Пример использования программы 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 – выделение части текста цветом

Наши соцсети

Сделать задержку в командном файле
Метки:             

Одна мысль о “Сделать задержку в командном файле

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *