Какая команда используется для приостановки выполнения пакетных файлов

Обновлено: 21.11.2024

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

Или текст, поясняющий ситуацию. В основном это помогает с SEO, но также помогает сформулировать потенциальные ответы.

5 ответов 5

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

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

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

Команда timeout не работает в Windows XP даже с установленным набором ресурсов 2003, а команда sleep не работает в Windows 7, поэтому команда ping все еще может быть полезной, если вы используете пакетный файл как в Win7, так и в Windows 7. WinXP.

время ожидания не работает в неинтерактивных сценариях: "ОШИБКА: перенаправление ввода не поддерживается, процесс немедленно завершается". поэтому иногда предпочтительнее использовать хак с "пингом".

Для справки, это отлично работает в Windows 10 2004 (b19041.630): C:\WINDOWS\system32>timeout /t 5 & ping mit.edu -- это делает паузу/обратный отсчет на 5 секунд, затем пингует mit. .edu 4x и переходит к подсказке, как и ожидалось.

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

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

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

Не делайте этого, даже если это немного лучше, чем проверка связи с реальным адресом. Ping — это просто неправильный инструмент для работы.

@Massimo Скорее всего, это не то, для чего он был предназначен :) Но я все же думаю, что это хорошее решение - в некоторых сценариях оно работает лучше, чем тайм-аут (в частности, с более высоким разрешением). Кроме того, он стал довольно широко известен, поэтому большинство людей не сильно удивятся (т. е. смутятся), увидев его в пакетном файле.

@Massimo Хорошо! Я думаю, у нас просто разные взгляды. Если вы не возражаете, я все же оставлю этот ответ, так как он кажется лучше, чем пингование локального хоста n раз, как это чаще всего описывается.

timeout – это правильное решение для операционных систем, в которых он работает. ping — единственное решение, которое работает с 5.1 по 6.3. Поскольку 25 % систем по-прежнему используют версию 5.1, тайм-аут не является «правильным способом».

тайм-аут — неправильное решение для любой операционной системы, потому что он фатально нарушен даже в Windows 10. Какая польза от команды, которая дает сбой только потому, что ввод перенаправляется?

Вы можете спать в пакетном режиме с помощью PowerShell:

Миллисекунды

Секунды

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

Эм. вся цель этого Q / A заключалась в том, чтобы точно исправить два других вопроса, которые имеют этот принятый ответ, но больше не могут быть исправлены, потому что их OP больше нет.

Хотя это и сработает, это все равно, что забивать винт молотком. Неправильный инструмент может работать, но это все равно неправильно.

@MarkAllen - технически вам придется беспокоиться о том, идет ли пинг с вашей ОС. Если вы достаточно беспокоитесь о '95 '98 или ME, то вы должны так же беспокоиться о 6.22, у которого тоже нет пинга

@Massimo Назовите это синдромом утенка. О, я только что увидел ваш комментарий выше. Вы даже не задавали это как настоящий вопрос, вы просто хотели, чтобы ваш ответ был ответом на вопрос в целом. Понимаю. Может быть, в следующий раз вы могли бы включить это в свой вопрос. Тогда я мог бы не тратить на это время.

@MarkHenderson Мне проще (для меня) вспомнить, поддерживает ли конкретный выпуск ОС TCP/IP, чем помнить, включает ли он команду, которую я раньше не слышал. Вы знаете?

Отказ от ответственности: это не "идеальное" решение, так что не утруждайте себя бить меня по голове этим, как это делается с теми, кто рекомендует ping .

По возможности обязательно используйте тайм-аут. Но, как отмечено в комментариях, это не всегда вариант (например, в неинтерактивном режиме). После этого я согласен, что пинг «кладж», пожалуй, следующий лучший вариант, так как он очень простой. Тем не менее, я предлагаю другой вариант. вставьте некоторый скрипт VB.

Основа этого решения имеет множество других применений. Часто VBS может делать то, что не может пакетная обработка, или, по крайней мере, делать это значительно проще.Используя технику, показанную здесь, вы можете смешивать их (не «бесшовно», а «функционально». ).

Вот одна строка, чтобы создать временный скрипт, выполнить его, а затем удалить. Скрипт засыпает за вас (в этом примере на 3 секунды).

Чтобы заставить пакетный файл ждать несколько секунд, доступно несколько вариантов:

ПАУЗА

Самый очевидный способ приостановить пакетный файл — это, конечно же, команда PAUSE. Это остановит выполнение командного файла до тех пор, пока кто-нибудь не нажмет «любую клавишу». Ну, почти любая клавиша: Ctrl, Shift, NumLock и т.д. не будут работать.
Это удобно для интерактивного использования, но иногда мы просто хотим задержать пакетный файл на фиксированное количество секунд без вмешательства пользователя.

СПАТЬ

SLEEP был включен в некоторые наборы ресурсов Windows.
Он ждет указанное количество секунд, а затем завершает работу.

задержит выполнение следующей команды на 10 секунд.

Существует множество доступных клонов SLEEP, в том числе упомянутые в абзаце «Порты UNIX» в конце этой страницы.

ТАЙМ-АУТ

TIMEOUT был включен в некоторые из наборов ресурсов Windows, но является стандартной командой в Windows 7.
Она ждет указанное количество секунд или нажатие клавиши, а затем завершает работу.
Таким образом, в отличие от SLEEP, задержку TIMEOUT можно «обойти», нажав клавишу.

задержит выполнение следующей команды на 10 секунд или до нажатия клавиши, в зависимости от того, что короче.

Вы не всегда можете захотеть отменить задержку простым нажатием клавиши, и в этом случае вы можете использовать дополнительный переключатель /NOBREAK TIMEOUT:

Вы по-прежнему можете прервать задержку, но для этого потребуется Ctrl+C, а не просто любая клавиша, и будет поднят ErrorLevel 1.

Для любой версии MS-DOS или Windows с клиентом TCP/IP можно использовать PING для задержки выполнения на несколько секунд.

задержит выполнение следующей команды на (чуть более) 5 секунд секунд (интервал между пингами по умолчанию равен 1 секунде, последний пинг добавит к задержке только минимальное количество миллисекунд).
Поэтому всегда указывайте количество секунд + 1 для задержки.

Техника тайм-аута PING демонстрируется в следующих примерах:

PMSleep.bat для Windows NT

PMClpW9x.bat для Windows 95/98

НЕТШ

NETSH может показаться маловероятным выбором для создания задержек, но на самом деле это очень похоже на использование PING:

пропингует локальный хост, что займет около 5 секунд, следовательно, задержка составит 5 секунд.

NETSH встроен в Windows XP Professional и более поздние версии.
Однако, к сожалению, этот трюк работает только в Windows XP/Server 2003.

ВЫБОР

добавит 10-секундную задержку.
С помощью REM | перед командой CHOICE блокируется стандартный ввод в CHOICE, поэтому единственным «выходом» для CHOICE является тайм-аут, указанный параметром /T.
Идея была позаимствована у Лоуренса Суси, я добавил параметр /C, чтобы сделать его независимым от языка (более простой REM | CHOICE /T:N,10 >NUL будет работать в многие, но не все языки).

Техника задержки CHOICE демонстрируется в следующем примере, Wait.bat:

Примечание. Строка IF ERRORLEVEL 255 ECHO Недопустимый параметр заканчивается «невидимым» символом BELL, который представляет собой символ ASCII 7 (звуковой сигнал) или ^G (Ctrl+G). ).

Обратный отсчет

Вы можете добавить вывод счетчика к пользовательскому тексту, например, (требуется @ECHO OFF):

СистемноеTrayMessage

SystemTrayMessage.exe — это программа, которую я написал для отображения всплывающей подсказки в области уведомлений на панели задач.
По умолчанию она начинает отображать всплывающую подсказку, которая будет видна в течение 10 секунд (или любого указанного тайм-аута), но программа завершится сразу после запуска всплывающей подсказки. Значок останется в области уведомлений по истечении времени ожидания, пока указатель мыши не наведется на него.
Используя дополнительный ключ /W, программа будет ожидать истечения времени ожидания, а затем скроет значок перед завершением.

Отображать всплывающую подсказку в течение 60 секунд и сразу же продолжать:

Отобразить всплывающую подсказку и подождать 60 секунд:

Или более сложный вариант (также требуется CountDown.exe):

Сценарии, отличные от DOS

В PowerShell вы можете использовать Start-Sleep, когда вам нужна временная задержка.
Задержку можно указать в секундах (по умолчанию) или в миллисекундах.

Следующий пакетный код использует PowerShell для создания задержки:

Или, если вы хотите разрешить доли секунд:

Обратите внимание, что запуск PowerShell.exe в пакетном файле может добавить дополнительную секунду к указанной задержке.

Используйте функцию SysSleep всякий раз, когда вам нужна временная задержка в сценариях Rexx.
SysSleep доступен в модуле RexxUtil OS/2 (собственном) и в модуле RegUtil Патрика Макфи для 32-разрядной версии Windows.

Используйте команду Sleep для временных задержек в сценариях KiXtart.

Используйте WScript.Sleep с последующей задержкой в ​​миллисекундах в VBScript и JScript (к сожалению, этот метод недоступен в HTA).

В следующем пакетном коде используется временный файл VBScript для создания точной задержки:

Или, если вы хотите разрешить пользователю пропускать задержку:

Порты UNIX

Скомпилированные версии SLEEP также доступны в следующих портах Unix:

Команда Sleep/Wait — очень полезная команда, которая используется для приостановки на заданное время во время выполнения пакетного сценария. Другими словами, эта команда упрощает выполнение команды в течение заданного времени.

Вы можете оказаться в ситуации, когда вам нужно запустить серию командных строк одну за другой, но с временной задержкой между ними. В этом случае пригодится команда sleep. В этой статье показано, как использовать команду sleep в пакетных сценариях Windows.

Примечание. В Windows нет прямой команды Sleep, как в Linux, поэтому для достижения того же результата необходимо использовать другой метод. Кроме того, для реализации пакетного сценария не требуются привилегии root.

1) Использование тайм-аута для перехода в спящий режим

timeout — это старая команда Windows, представленная в Windows 2000, которая используется для добавления задержки между двумя задачами.

Пример 1: базовый тайм-аут в пакетном скрипте

@echo off
echo Первая задача здесь .
echo Приблизительно 10-секундная задержка.
timeout /t 10
echo Вторая задача.
пауза

Здесь у нас есть две задачи, и мы вставили сценарий тайм-аута, который ждет 10 секунд до завершения первой задачи перед запуском второй задачи.

Недостаток: это покажет ненужное «Ожидание 0 секунд, нажмите клавишу, чтобы продолжить». И когда вы нажмете любую клавишу, он перейдет к следующей задаче. Это хороший способ сообщить пользователю безопасный путь отхода от сна.

Пример 2: Тайм-аут только с клавишей CTRL + C для пропуска

Здесь /nobreak не позволяет прерывать или пропускать режим сна с помощью любой клавиши. Но нажатие комбинации клавиш CTRL+C заставит закрыть пакетную обработку и немедленно закрыть программу.

Пример 3. Переход в спящий режим без сообщения об истечении времени ожидания

Добавление части >nul, чтобы команда ничего не выводила на экран. Он подавляет обратный отсчет времени.

Еще один вариант использования тайм-аута выглядит следующим образом:

При этом откроется калькулятор, затем подождите 5 секунд, прежде чем открывать блокнот. Не забудьте включить и && между каждым блоком. Вы можете продолжить каскадирование, как показано ниже

Откроется калькулятор, затем подождите 3 секунды, пока откроется блокнот, затем подождите 4 секунды, пока откроется редактор реестра.

Недостатки TIMEOUT

  • Невозможно выполнить задержку в доли секунды. т.е. вроде timeout /t 0.5 не работает. И выдаст
    сообщение об ошибке "Ошибка: указано недопустимое значение времени ожидания (/T). Допустимый диапазон: от -1 до 99999)
  • Невозможно использовать второе значение больше 99999

2) Использование Ping to Delay для перехода в спящий режим

Пинг фактически используется для определения того, отвечает ли ресурс на запрос. Ping отправляет запрос к ресурсу и ждет ответа одну секунду. В результате полезно использовать его как функцию задержки. Даже если он ждет одну секунду, он может получить ответ через несколько миллисекунд. Однако, как только вы пропингуете последний пакет здесь в десятом запросе, он автоматически остановится.

Ресурс, который мы пингуем здесь, — это localhost, который представляет собой локальную петлю, и он отвечает мгновенно в течение миллисекунды, но должен ждать 1 секунду каждый. А здесь, в примере, мы ждем почти 10 секунд перед выполнением следующей строки.

Использование Ping для задержки с несуществующим IP

Здесь ждем 10 секунд. Здесь мы должны пропинговать несуществующий IP-адрес, и если он существует, он не будет работать.-w указывает на ожидание, и здесь оно ожидает 10000 мс, вы можете изменить это значение. И по умолчанию пинг будет запрашивать 4 раза до ресурса. Здесь -n 1 указывает запрос только 1 раз.

Использование Ping для задержки менее чем на 1 секунду.

Просто замените 10 000 мс на что-нибудь меньшее, чем 1000 мс. например 500 мс, как показано ниже

Использование Powershell в Command для задержки

Просто следуйте приведенному ниже простому примеру, если вы хотите использовать команды Powershell из командной строки:

введите эту команду в командной строке или пакетном файле. Эта команда будет удерживать экран в течение 5 секунд. Вы можете изменить от 5 до любого числа. Это может быть полезно в случае сбоя или проблемы с командой Windows.

Waitfor.exe — это небольшая утилита, входящая в состав Windows 7 и более поздних версий. Эта программа предназначена для прослушивания именованного сигнала и ответа на него. Посетите здесь для получения дополнительной информации.

В версии для Windows нет режима сна и ожидания команды. Лучшей альтернативой является команда Timeout, как описано выше. В Linux вы можете просто использовать: sleep n в терминале, где n — время в секундах.

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

Выполнение пакетного сценария также можно приостановить, нажав CTRL-S (или клавишу Pause|Break) на клавиатуре. Это также работает для приостановки отдельной команды, например длинного списка DIR /s. Нажатие любой клавиши возобновит операцию.

Есть ли команда ожидания в CMD?

Вы можете использовать команду timeout для ожидания командной строки или пакетного сценария в течение указанного периода времени. Время определяется в секундах. Вы можете использовать /NOBREAK игнорировать нажатия клавиш и ждать указанное время.

Что такое команда Pause в CMD?

PAUSE [комментарий] Назначение: Приостанавливает выполнение пакетного файла до тех пор, пока не будет нажата клавиша. Обсуждение. PAUSE приостанавливает выполнение пакетного файла и отображает сообщение.

Что делает пауза NUL?

Во время паузы будет отображаться: Нажмите любую клавишу, чтобы продолжить. . . Чтобы скрыть сообщение, мы перенаправляем вывод на специальное устройство с именем nul. На самом деле это не настоящее устройство, но все, что мы отправляем на него, выбрасывается.

Как приостановить пакетный файл на 30 секунд?

Введите команду. ПАУЗА — введите паузу в строку. Больше ничего здесь добавлять не нужно. TIMEOUT — введите время ожидания, где «время» заменяется количеством секунд до задержки. Например, ввод тайм-аута 30 задержит пакетный файл на 30 секунд.

Как приостановить пакетный файл на 10 секунд?

Команду паузы можно вставить перед разделом пакетного файла, который вы не хотите обрабатывать. Когда пауза приостанавливает выполнение пакетной программы, вы можете нажать CTRL+C, а затем нажать Y, чтобы остановить пакетную программу.

Что такое команда Pause в пакетном файле?

Команда паузы используется в пакетном файле компьютера. Это позволяет компьютеру приостановить выполнение текущего пакетного файла до тех пор, пока пользователь не нажмет любую клавишу.

Что означает D в cmd?

Параметр «/d» используется для изменения текущего диска на определенную папку с другого тома диска. Например, если вы сейчас находитесь на диске «D:» и хотите вернуться в папку Windows с диска «C:», вы должны ввести «cd /d C:\Windows» и нажать Enter на клавиатуре. , как показано на следующем снимке экрана.

Читайте также: