Эта статья расскажет, как спать или ждать x секунд в bat-файле. Выполнение bat-файла приостанавливается x секунд, а затем переходит к следующим командам.
Команда Sleep/Wait — очень полезная команда, которая используется для приостановки на заданное время во время выполнения пакетного сценария . Другими словами, эта команда упрощает выполнение команды в течение заданного времени.
В пакетном файле есть несколько команд и процессов установки, выполнение которых обычно занимает некоторое время. Но когда пакетный файл запускается, он не ждет завершения командного процесса; он выполняет все команды построчно.
Важно, чтобы эти команды ждали их завершения, а затем выполняли следующие команды. Чтобы процесс ждал завершения, мы используем /wait параметр с START команда.
Вместо запуска команды, если есть необходимость вставить задержки в Batch файл на какой-то интервал времени, можно использовать такие команды, как TIMEOUT и PAUSE остановить выполнение следующего процесса на короткий промежуток времени или до тех пор, пока не будет нажата клавиша.
В этом руководстве показаны различные способы ожидания завершения команды или программы перед выполнением следующей команды.
Вот одна строчка, чтобы создать временный скрипт, выполнить его, а затем удалить. Скрипт делает сон за вас (в этом примере 3 секунды).
Вот в принципе то же самое, только написанное немного по-другому:
set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%
И наконец, как ping , CScript сам имеет вариант тайм-аута! Таким образом, если вы вводите бесконечный цикл в сценарий, вы можете позволить интерпретатору принудительно установить продолжительность. Обратите внимание, что это «занятая» операция, которая съедает ЦП, и поэтому я не рекомендую ее, когда вы можете использовать WScript.Sleep процедуры, но привожу ее как концептуальный вариант для полноты картины:
set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%
Задержка времени (пауза, тайм-аут) в бат-файле
Вот, нашёл в Сети рабочий пример по причине задержки времени (пауза, тайм-аут) при выполнении команды в bat-файле:
Всё-бы ничего, да только такая процедура очистки временных папок при посещении – сносит полезные файлы и система выдает окно ошибки
Досадно. Однако, устройство паузы в 30 сек. решил всю проблему. И система грузится, и папки темпов – чистятся.
Полный текст bat-файла стал теперь:
Прим. Лошади понятно, что изменчивая цифра 30 на свое значение, получить другие значения паузы в секундах можно в bat-файле.
начало с VISTA , в ряде случаев семейства Windows встречается команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до команды или ожидание до упора. Имеется также параметр, задающий игнорирование клавиш.
/Т 50
Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение равное -1 задает максимальное время ожидания до упора.
/БЕЗ ПЕРЕРЫВА
Игнорировать настройки клавиш, ждать указанное время.
Весь текст примера можно просмотреть в bat-файле, играй и смотри, как это работает. Впечатляет.
Я использую пакетный файл для запуска нескольких программ, которые мне нужны, работая в фоновом режиме. До сих пор я использовал команду паузы, чтобы выполнить ее после завершения некоторых других запусков. Я бы предпочел использовать команды ожидания или сна, но они, похоже, не включены в Windows 7.
Существует множество утилит сна, которые вы можете загрузить и поместить в папку System32, одна из них входит в состав Windows Server 2003 Resource Kit называется sleep.exe .
Эта утилита принимает параметр тайм-аута для ожидания указанного период времени (в секундах) или до тех пор, пока не будет нажата любая клавиша. Он также принимает параметр для игнорирования нажатия клавиши.
Вот макрос пакетного файла, который вы можете использовать:
@echo off & cls & setlocal disabledelayedexpansion
set LF=^
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
set _delay=for /l %%a in (1 1 2) do if %%a==2 (%\n%
for /f "tokens=1 delims=, " %%e in ("!argv!") do (%\n%
set "_sec=%%~e" %\n%
%__APPDIR__%ping.exe localhost -n !_sec! -w 1000 ^>nul 2^>^&1 %\n%
) %\n%
) else setlocal enabledelayedexpansion ^& set argv=,
Вы можете вызвать это в своем пакетном файле следующим образом:
%_delay% seconds
Нравится %_delay% 10 будет ждать 10 секунд. Чтобы изменить имя макроса, замените «_delay» на что-нибудь еще в четвертой строке.
Я сейчас запускаю пакетный скрипт, который занимает очень много времени и чьи выходные данные мчатся с нечитаемой скоростью. Есть ли сочетание клавиш, которое позволяет вам приостановить консоль CMD, где она в настоящее время находится, чтобы остановить и прочитать вывод, а затем снова запустить ее с того же места?
Я считаю, что последовательные управляющие последовательности ‘Ctrl-S’ XOFF и ‘Ctrl-Q’ XON являются ключевыми последовательностями, предназначенными для решения проблемы.
ответил 26 ноя 2016 в 1:44
Есть ли на вашей клавиатуре Pause/Break ключ? Это хорошо послужило бы для этого. Вот как это выглядит или, по крайней мере, раньше:
В качестве интересного бонуса этот ключ также можно использовать во время POST (самотестирование при включении питания, которое запускается при включении компьютера) для считывания вывода из BIOS.
Если у вас нет этого ключа, комбинация Control + NumLock должно работать точно так же, и есть другие варианты в зависимости от вашего производителя, согласно Википедии .
Чтобы возобновить выполнение, нажмите Enter .
ответил 14 ноя 2016 в 3:12
4 золотых значка 23 серебряных знака 51 бронзовый знак
Вы можете использовать команду “больше”. Хотя это не совсем то, что вы ищете, это ограничит вывод на экран страницы.
ответил 14 ноя 2016 в 13:46
Добавление еще одного полезного способа для linux-оболочек . (Но, может быть, и в Windows тоже, попробуйте!)
Прессинг ctrl + z
зависнет программа. ( Сообщение: остановлено)
Чтобы снова запустить его в прежнее состояние, как если бы оно было приостановлено:
Или для многократного использования: fg
имя_программы_предварительно_ctrl+z_stopped `
ответил 27 марта 2018 в 22:54
2 серебряных значка 6 бронзовых знаков
В системах Windows, если включен экран вывода Режим быстрого редактирования (по конфигурации) просто нажмите на экран и выберите любую часть экрана. Программа остановит выполнение до тех пор, пока вы не щелкнете правой кнопкой мыши по экрану, чтобы отменить выбор.
Экран может потерять фокус, и он будет продолжать зависать, пока вы не вернетесь и не щелкнете по нему правой кнопкой мыши. Имейте в виду, что любое содержимое буфера обмена, если таковое имеется, может быть перевернуто на этот экран, когда вы щелкнете по нему правой кнопкой мыши.
ответил 26 января 2020 в 10:53
4 бронзовых знака
Вы можете использовать ProcessExplorer или аналогичную программу TaskManager -> ПКМ для процесса, запущенного внутри cmd (не самого основного процесса cmd) -> Suspend. Затем, когда вы снова захотите использовать юани -> возобновить
Примечание. Если вы используете для этого ProcessExplorer, возможно, вы захотите оставить его открытым, пока не нажмете «Возобновить». Если вы вместо этого закроете его, а затем снова откроете, когда захотите возобновить процесс, я заметил, что иногда он дает сбой и не распознает, что текущее состояние этого процесса «Приостановлено»; таким образом, если вы нажмете «Возобновить» в этом случае, он может не возобновить его. Но если вы оставите PE открытым до тех пор, пока не захотите снова возобновить процесс, все будет работать нормально. Если вы беспокоитесь о ресурсах, которые Process Explorer может потреблять при его открытии, вы можете просто сделать «Просмотр» -> «Скорость обновления» -> «Приостановлено».
ответил 6 мая 2020 в 14:57
1 золотой значок 6 серебряных значков 19 бронзовых знаков
Здесь есть еще несколько методов, которые можно добавить, если мы будем тщательны:
1) В дополнение к кнопке Pause/Break вы можете продублировать ее функциональность, используя “CTRL+C”.
Это приведет к паузе сценария cmd и спросит вас, хотите ли вы его завершить. Как только вы закончите поиск, вы можете выбрать «НЕТ» (или, возможно, да, если вам это подходит), и он продолжится (или выйдет, если вы выбрали «да»).
2) Вы также можете сделать паузу с помощью мыши, щелкнув курсором мыши в окне, чтобы выбрать текст из терминала CMD.
Возможно, вы замечали эту приостановку вывода в прошлом и думали, что задерживается только вывод, однако, когда скрипты выполняются в интерактивных экземплярах cmd, вы фактически приостанавливаете выполнение кода (так же, как с «Pause/Break ” и “CTRL+C”).
Однако, как только окно потеряет фокус или вы щелкнете, чтобы отменить паузу, выполнение кода продолжится, и у вас нет возможности завершить код таким образом.
ответил 14 ноя 2016 в 19:08
Содержание
Вы можете оказаться в ситуации, когда вы хотите запустить серию командных строк одну за другой, но с временной задержкой между ними. В этом случае пригодится команда сна. В этой статье показано, как использовать команду sleep в пакетных сценариях Windows.
рис. Спи и жди
📚 Примечание : В Windows нет прямой команды Sleep, как в Linux, мы должны использовать другой метод для достижения того же результата. Кроме того, для реализации пакетного сценария не требуются привилегии root.
Использование тайм-аута для перехода в спящий режим
тайм-аут — это старая команда Windows, представленная в Windows 2000, которая используется для добавления задержки между двумя задачами.
рис. помощь по тайм-ауту
Пример 1: базовый тайм-аут в пакетном сценарии
Здесь у нас есть две задачи, и мы вставили сценарий тайм-аута, который ждет 10 секунд завершения первой задачи перед запуском второй задачи.
” Тайм-аут /t 10 ” отложит выполнение скрипта на 10 секунд. Окно консоли будет отсчитывать оставшееся время.
Пример 2: Тайм-аут только с клавишей CTRL + C для пропуска
H ere, /nobreak не позволяет прервать или пропустить режим сна любой клавишей. Но нажатие комбинации клавиш CTRL+C заставит закрыть пакетную обработку и немедленно закрыть программу.
Пример 3: Переход в спящий режим без сообщения об истечении времени ожидания
Добавление >nul часть, чтобы команда ничего не выводила на экран. Он подавляет обратный отсчет времени.
Это откроет калькулятор, затем подождите 3 секунды, пока откроется блокнот, затем подождите 4 секунды, пока откроется редактор реестра.
Обратите внимание: Ctrl + C разрушит всю программу.
Недостатки TIMEOUT
Вот некоторые недостатки тайм-аута:
Невозможно выполнить задержку в доли секунды. т.е. вроде timeout /t 0.5 не работает. И подарит
сообщение об ошибке «Ошибка: указано неверное значение времени ожидания (/T). Допустимый диапазон: от -1 до 99999)
Нельзя использовать второе значение больше 99999
Использование Ping to Delay для перехода в спящий режим
Пинг фактически используется для определения того, отвечает ли ресурс на запрос. Ping отправляет запрос на ресурс и ждет ответа одну секунду. В результате полезно использовать его как функцию задержки. Даже если он ждет одну секунду, он может получить ответ через несколько миллисекунд. Однако, как только вы пропингуете здесь последний пакет в десятом запросе, он автоматически остановится.
Ресурс, который мы пингуем здесь, является локальным хостом, который представляет собой локальную петлю, и он отвечает мгновенно в течение миллисекунды, но каждый должен ждать 1 секунду. А здесь, в примере, мы ждем почти 10 секунд, прежде чем выполнить следующую строку.
Обратите внимание: Ctrl + C прервет задержку.
Использование Ping для задержки с несуществующим IP-адресом
Здесь ждем 10 секунд. Здесь мы должны пропинговать несуществующий IP-адрес, и если он существует, он не будет работать. -ш указывает на ожидание, и здесь он ожидает 10000 мс , вы можете изменить это значение. И по умолчанию пинг будет запрашивать 4 раза до ресурса. Здесь -n 1 указывает только запрос 1 время.
Использование Ping для задержки менее чем на 1 секунду.
Просто замените 10000 мс любым значением меньше 1000 мс. примерно 500 мс, как показано ниже
ping 192.4.4.4 -n 1 -w 500 > ноль
Использование Powershell в Command для задержки
введите эту команду в командной строке или пакетном файле. Эта команда будет удерживать экран в течение 5 секунд. Вы можете изменить его с 5 на любое число. Это может быть полезно, если команда Windows не работает или имеет проблему.
Использование Powershell в команде Sleep Start для задержки
В качестве альтернативы вы можете запустить команду Powershell в режиме ожидания в CMD, как показано ниже:
Приведенная выше команда будет ждать 500 миллисекунд.
Использование команды Мшта
Mshta.exe — это собственный двоичный файл Windows, разработанный специально для выполнения файлов Microsoft HTML Application (HTA). Mshta может запускать код, написанный на узле сценариев Windows (VBScript и JScript), который встроен в HTML с учетом сетевых прокси-серверов.
Заключение:
Подводя итог, можно сказать, что в пакетных файлах Windows можно приостановить выполнение пакетного файла на указанное количество секунд, используя ” sleep ” команда, и вы можете создать пользовательский ” подождите ” с помощью таймаута ” ” команда. Обе эти команды можно найти в командах ” ” раздел пакетного файла. В то время как команда “ожидание” может использоваться для ожидания определенного количества секунд перед продолжением следующей команды, команда “спать” используется для приостановки выполнения пакетного файла на указанное число секунд за раз. С помощью этих команд вы сможете регулировать время и поток вашего пакетного файла, что позволит вам обеспечить его бесперебойную и эффективную работу.
Что такое команда WaitFor?
Есть ли в Windows команда, позволяющая спать и ждать?
В версии для Windows нет команд сна и ожидания. Лучшей альтернативой является команда Timeout, как описано выше. В Linux вы можете просто использовать: спать n в терминале, где n — время в секундах.
Как заснуть на пять секунд в батнике?
timeout /t 5 /nobreak >nul
Пакетное ожидание с командой ping
Хотя ПК приостанавливает выполнение команды на x секунд при использовании timeout команда, она по-прежнему потребляет довольно много ресурсов ЦП. ping команда с петлевым адресом – 127.0.0.1 также может создавать 1-секундную задержку между каждым последовательным пингом и потреблять меньше нагрузки на ЦП.
ping Пример ожидания летучей мыши
6 означает, что задержка установлена на 6-1=5 секунды.
>nul направляет поток стандартного вывода в null и поэтому в консоли не отображается никакой информации.
Основатель DelftStack.com. Джинку работает в робототехнике и автомобилестроении более 8 лет. Он оттачивал свои навыки кодирования, когда ему нужно было выполнять автоматическое тестирование, сбор данных с удаленных серверов и создание отчетов по результатам испытаний на выносливость. Он имеет опыт работы в области электротехники/электроники, но расширил свой интерес к встроенной электронике, встроенному программированию и внешнему/внутреннему программированию.
Используйте команду TIMEOUT для задержки выполнения
TIMEOUT Команда используется для задержки выполнения команды на несколько секунд или минут. Его можно использовать только в пакетном файле.
Диапазон для TIMEOUT команда варьируется от -1 до 100000. Если для задержки установлено значение -1, она будет действовать как команда паузы, чтобы дождаться нажатия клавиши.
Как и в приведенной выше команде, мы можем заменить /wait вставив TIMEOUT команда с помощью /t параметр. Синтаксис для TIMEOUT команда приведена ниже:
Возьмем приведенный выше пример и добавим временную задержку в 30 секунд после выполнения первой программы. Код для того же показан ниже.
Хотя вы можете остановить задержку, нажав Ctrl + С что повысит errorlevel1.
Пакетный сон с тайм-аутом (> Windows 7 / 2008)
timetout задерживает выполнение на заданные секунды.
timeout <seconds> /nobreak
<seconds> любое значение от -1 до 100000. -1 заставляет компьютер бесконечно ждать нажатия клавиши.
timeout Пример сна летучей мыши
Приостановится на 5 секунд перед следующим выполнением.
Используйте команду PAUSE, чтобы приостановить выполнение
START /B системная информация >> output.txt
Все перечисленные выше методы работают нормально. Если вы используете START
команда, рекомендуется использовать /wait
вместо команд задержки, так как процесс может занять больше времени, чем указано.
Используйте /WAIT для ожидания завершения выполнения команды
Когда мы запускаем программу в пакетном файле с помощью START
команду, мы можем дождаться завершения программы, добавив /wait
к START
команда. Даже если есть несколько команд, /wait
может использоваться для завершения каждого процесса и перехода к следующему.
Также параметр /B
используется, чтобы оставаться в том же процессе без создания нового окна. START
команда без /B
Параметр открывает программу или команду в новом окне.
Ожидание завершения выполнения команды
Например, нам нужно дождаться завершения выполнения команды, прежде чем запускать следующую.
START /B systeminfo >> output.txt
Ждать .exe Файл для завершения выполнения
Другой пример: нам нужно запустить .exe файл и дождитесь полного завершения выполнения.
START /B /WAIT JRuler.exe
START /B системная информация >> output.txt
Как только вы закроете .exe
файл, вторая программа начнет выполнение. cmd /k
в последней строке используется для предотвращения выхода из командной строки после выполнения.
Если программ несколько, можно использовать /WAIT
с каждой командой, чтобы дождаться завершения выполнения. START
команда с помощью /WAIT
параметр не имеет таймаута, т. е. не имеет значения, сколько времени займет завершение процесса; он будет ждать, пока процесс не будет завершен.
START /WAIT install1.exe
START /WAIT install2.exe
/WAIT можно использовать только с START команда. Мы можем вставить временную задержку для других команд, используя TIMEOUT и PAUSE команды.