Вопрос: Как спать в пакетном файле?


Как временно приостановить выполнение в командном файле Windows между командой и следующей?


112
2017-09-26 19:45


Источник


Это намерение стать каноническим? Если это так, то может быть уместен какой-то пояснительный текст. - John Gardeniers
«Пояснительный текст», как в? - Massimo
Большинство, если не все, канонические вопросы, которые я видел, включают текст, описывающий намерение этого вопроса. - John Gardeniers
Или какой-то текст, объясняющий ситуацию ... В основном это помогает SEO, но также помогает формировать потенциальные ответы. - Chris S
SEO работает просто отлично. Сначала я попал для поиска в Google. - jbo5112


Ответы:


Правильный способ спящего в пакетном файле - использовать timeout команда, введенная в Windows 2000.

Ждать где-то между 29 и 30 секундами:

timeout /t 30

Тайм-аут прерывается, если пользователь нажимает любой ключ; однако команда также принимает дополнительный переключатель /nobreak, который фактически игнорирует все, что может нажать пользователь, за исключением явного CTRL-C:

timeout /t 30 /nobreak

Кроме того, если вы не хотите, чтобы команда печатала свой обратный отсчет на экране, вы можете перенаправить свой вывод на NUL:

timeout /t 30 /nobreak > NUL

170
2017-09-26 19:45



Команда тайм-аута не работает с Windows XP даже с установленным комплектом Resource 2003, а команда sleep не работает в Windows 7, поэтому команда ping все равно может быть полезной, если вы используете командный файл как для Win7, так и для WinXP.
тайм-аут не работает в неинтерактивных скриптах: «ОШИБКА: перенаправление ввода не поддерживается, сразу же выходя из процесса». поэтому иногда использование взлома с «ping» является предпочтительным. - iMysak


Так как это применимо и здесь, я скопирую мой ответ с другого сайта,

Если вы хотите использовать ping, есть лучший способ. Вы захотите выполнить ping-адрес, который не существует, поэтому вы можете указать тайм-аут с точностью до миллисекунды. К счастью, такой адрес определен в стандарте (RFC 3330), и это 192.0.2.x, Это не сделано, это действительно адрес с единственной целью - не существующий (это может быть неясно, но оно применяется даже в локальных сетях):

192.0.2.0/24 - Этот блок назначается как «TEST-NET» для использования в      документацию и пример кода. Он часто используется в сочетании с      доменные имена example.com или example.net в поставщике и протоколе      документация. Адреса внутри этого блока не должны отображаться на      публичный Интернет.

Чтобы спать в течение 123 миллисекунд, используйте ping 192.0.2.1 -n 1 -w 123 >nul


7
2017-07-17 10:58



Пожалуйста, не делайте этого, даже если это немного лучше, чем пинг реального адреса. Ping просто неправильно инструмент для работы. - Massimo
@Massimo. Скорее всего, это не то, что он должен был делать. Но я думаю, что это хорошее решение - оно работает лучше, чем таймаут в некоторых сценариях (в частности, более высоком разрешении). Кроме того, это стало довольно хорошо известно, поэтому большинство людей не были бы очень удивлены (т. Е. Смущены), когда увидели бы это в вашем пакетном файле. - mafu
Этот ОК был создан в точку чтобы указать на правильное решение проблемы, потому что есть несколько других подобных вопросов, на которые ответили «просто используйте ping» или подобные kludges. - Massimo
@ Массимо Хорошо! Думаю, у нас просто разные взгляды. Если вы не возражаете, я все равно оставлю этот ответ, поскольку он кажется лучше, чем pinging localhost n раз, как это чаще всего описывается. - mafu
тайм-аут - правильное решение для операционных систем, над которыми он работает. ping - единственное решение, которое работает с 5.1-6.3. С 25% систем, все еще находящихся на 5.1, тайм-аут не является «правильным способом». - Wyrmwood


Вы также можете вставить пинг на localhost. Это займет 4 секунды (по умолчанию). Некоторые считают, что некоторые, но все же хорошо работают.

Команда:
    ping 127.0.0.1


4
2017-09-26 20:10



Эмм ... вся цель этого Q / A была в точку исправить два других вопроса, которые имеют это как их принятый ответ, но больше не могут быть исправлены, потому что их ОП больше не существует. - Massimo
Пока он будет работать, это эквивалент вождения винта с молотком. Неправильный инструмент может работать, но он все еще не прав. - voretaq7
@MarkAllen Другими словами, Windows NT4, 95, 98, ME и старше? - Chris McKeown
@MarkAllen - технически вам тогда придется беспокоиться о том, ping поставляется с вашей ОС. Если вы достаточно беспокоитесь о '95 '98 или ME, тогда вы должны быть так же обеспокоены тем, что 6.22, который не имеет ping или - Mark Henderson♦
@MarkHenderson Мне легче (для меня) помнить, поддерживает ли конкретная версия ОС TCP / IP, чем помнить, включает ли она команду, которую я ранее не слышал. Вы знаете? - Mark Allen