Все паузы между командами и есть ли горячая клавиша для приостановки выхода из окна CMD во время его работы?


Джинку Ху

30 января 2023 г.

28 марта 2019 г.

Sleep or Wait X Seconds in a Bat File

Эта статья расскажет, как спать или ждать x
секунд в bat-файле. Выполнение bat-файла приостанавливается x
секунд, а затем переходит к следующим командам.


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

Wait for a Command to Finish Execution in Windows Batch File

В пакетном файле есть несколько команд и процессов установки, выполнение которых обычно занимает некоторое время. Но когда пакетный файл запускается, он не ждет завершения командного процесса; он выполняет все команды построчно.

Важно, чтобы эти команды ждали их завершения, а затем выполняли следующие команды. Чтобы процесс ждал завершения, мы используем /wait
параметр с START
команда.

Вместо запуска команды, если есть необходимость вставить задержки в Batch файл на какой-то интервал времени, можно использовать такие команды, как TIMEOUT
и PAUSE
остановить выполнение следующего процесса на короткий промежуток времени или до тех пор, пока не будет нажата клавиша.

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

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

 echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs

  

Вот в принципе то же самое, только написанное немного по-другому:

 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-файле:

:/>  Касперский не скачивается с официального сайта

Работает в любой ОС Windows, аж бегом

Зачем нужна задержка (пауза, тайм-аут) при выполнении команды в bat-файле?

У всех – по-разному.
Лично мне она (пауза) понадобилась вот для чего:

– Взял простенький bat-файл для очистки временных папок и бросил его в АВТОЗАГРУЗКУ

Прикололся, типа – чтобы этот батничек чистил временные каталоги при рассмотрении системы.
Текст батника вытащил из стандартного Total Commander-a:

cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C: \Windows\Prefetch &del *.pf 2>nul &cd/d C:\Windows\Temp&rd/s/q c:\windows\temp 2>nul

Всё-бы ничего, да только такая процедура очистки временных папок при посещении –
сносит полезные файлы и система выдает окно ошибки

Досадно.
Однако, устройство паузы в 30 сек. решил всю проблему.
И система грузится, и папки темпов – чистятся.

Полный текст bat-файла стал теперь:

Прим. Лошади понятно, что изменчивая цифра 30 на свое значение,
получить другие значения паузы в секундах можно в bat-файле.

начало с VISTA
, в ряде случаев семейства Windows встречается команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до команды или ожидание до упора. Имеется также параметр, задающий игнорирование клавиш.

/Т 50
Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение равное -1 задает максимальное время ожидания до упора.
/БЕЗ ПЕРЕРЫВА
Игнорировать настройки клавиш, ждать указанное время.
/?
Отображение справки в командной строке.

ТАЙМ-АУТ /?
ТАЙМ-АУТ /T 10
ТАЙМ-АУТ /T 300 /NOBREAK
ТАЙМ-АУТ /T -1

Весь текст примера можно просмотреть в bat-файле,
играй и смотри, как это работает.
Впечатляет.


Я использую пакетный файл для запуска нескольких программ, которые мне нужны, работая в фоновом режиме. До сих пор я использовал команду паузы, чтобы выполнить ее после завершения некоторых других запусков. Я бы предпочел использовать команды ожидания или сна, но они, похоже, не включены в Windows 7.

:/>  Майкл Коэн «Дизайн голосового пользовательского интерфейса». 2004 [Перевод. Фрагмент] / Хабр

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

Ƭᴇcʜιᴇ007's user avatar

19 золотых значков
201 серебряный значок
268 бронзовых знаков

спросил 29 сен 2009 в 0:21

Cegorach's user avatar

Существует множество утилит сна, которые вы можете загрузить и поместить в папку System32, одна из них входит в состав Windows Server 2003 Resource Kit
называется sleep.exe
.

Вы также можете использовать трюк с пингом:

 :sleep
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n %1 -w 1000 > NUL

  

, то откуда-то из командного файла вы можете вызвать его так:

 CALL :sleep 1

  

ответил 29 сен 2009 в 0:26

John T's user avatar

Джон Т.

27 золотых значков
341 серебряный значок
348 бронзовых знаков

Вы можете использовать timeout
команда:

Эта утилита принимает параметр тайм-аута для ожидания указанного
период времени (в секундах) или до тех пор, пока не будет нажата любая клавиша. Он также принимает
параметр для игнорирования нажатия клавиши.

Например, подождать 10 секунд:

 TIMEOUT /T 10

  
 TIMEOUT /?

  

Gaff's user avatar

15 золотых значков
57 серебряных значков
68 бронзовых знаков

ответил 18 фев 2010 в 22:21

Alex S's user avatar

Алекс С

2 золотых значка
9 серебряных значков
2 бронзовых знака

 timeout /t <seconds> /nobreak > NUL

  

ответ дан 1 сентября 2010 г. в 12:53

Prichard's user avatar

1 серебряный значок
2 бронзовых знака

Также есть

 waitfor SomethingThatIsNeverHappening /t 10

  

Который будет ждать от 1 до 99999 секунд.

ответил 1 сентября 2010 в 13:06

Fowl's user avatar

2 золотых значка
7 серебряных значков
18 бронзовых знаков

Вот макрос пакетного файла, который вы можете использовать:

 @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» на что-нибудь еще в четвертой строке.

:/>  Перенос системных папок «Temp» на другой раздел или диск

ответил 29 июля 2020 в 9:48

Wasif's user avatar

2 золотых значка
19 серебряных значков
32 бронзовых знака

Если у вас установлен Python (и вы добавили путь установки в переменную окружения), вы можете позволить Python заснуть, например:

 echo from time import sleep; sleep
| python

(Если у вас Windows Vista или выше, timeout
хотя, естественно, это правильный путь.)

ответил 14 января 2011 в 14:43

Protector one's user avatar

Защитник один

3 золотых значка
20 серебряных значков
29 бронзовых знаков

Я сейчас запускаю пакетный скрипт, который занимает очень много времени и чьи выходные данные мчатся с нечитаемой скоростью. Есть ли сочетание клавиш, которое позволяет вам приостановить консоль CMD, где она в настоящее время находится, чтобы остановить и прочитать вывод, а затем снова запустить ее с того же места?

enter image description here

спросил 14 ноя 2016 в 2:55

Hashim Aziz's user avatar

Хашим Азиз

34 золотых значка
98 серебряных значков
166 бронзовых знаков

Я не видел этого в других ответах.

Я считаю, что последовательные управляющие последовательности ‘Ctrl-S’ XOFF и ‘Ctrl-Q’ XON являются ключевыми последовательностями, предназначенными для решения проблемы.

Community's user avatar

ответил 26 ноя 2016 в 1:44

NetScr1be's user avatar

Есть ли на вашей клавиатуре Pause/Break
ключ? Это хорошо послужило бы для этого. Вот как это выглядит или, по крайней мере, раньше:

Pause Break Key from Wikipedia

В качестве интересного бонуса этот ключ также можно использовать во время POST (самотестирование при включении питания, которое запускается при включении компьютера) для считывания вывода из BIOS.

Если у вас нет этого ключа, комбинация Control
+ NumLock
должно работать точно так же, и есть другие варианты в зависимости от вашего производителя, согласно Википедии
.

Чтобы возобновить выполнение, нажмите Enter
.

ответил 14 ноя 2016 в 3:12

Marc.2377's user avatar

4 золотых значка
23 серебряных знака
51 бронзовый знак

Вы можете использовать команду “больше”. Хотя это не совсем то, что вы ищете, это ограничит вывод на экран страницы.

ответил 14 ноя 2016 в 13:46

Rooparsh Kalia's user avatar

Добавление еще одного полезного способа для linux-оболочек
. (Но, может быть, и в Windows тоже, попробуйте!)

Прессинг ctrl
+ z

зависнет программа. ( Сообщение: остановлено)

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

Или для многократного использования: fg

имя_программы_предварительно_ctrl+z_stopped
`

ответил 27 марта 2018 в 22:54

NVRM's user avatar

2 серебряных значка
6 бронзовых знаков

В системах Windows, если включен экран вывода Режим быстрого редактирования
(по конфигурации) просто нажмите на экран и выберите любую часть экрана.
Программа остановит выполнение до тех пор, пока вы не щелкнете правой кнопкой мыши по экрану, чтобы отменить выбор.

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

ответил 26 января 2020 в 10:53

agcala's user avatar

4 бронзовых знака

Вы можете использовать ProcessExplorer или аналогичную программу TaskManager -> ПКМ для процесса, запущенного внутри cmd (не самого основного процесса cmd) -> Suspend.
Затем, когда вы снова захотите использовать юани -> возобновить

Примечание. Если вы используете для этого ProcessExplorer, возможно, вы захотите оставить его открытым, пока не нажмете «Возобновить». Если вы вместо этого закроете его, а затем снова откроете, когда захотите возобновить процесс, я заметил, что иногда он дает сбой и не распознает, что текущее состояние этого процесса «Приостановлено»; таким образом, если вы нажмете «Возобновить» в этом случае, он может не возобновить его. Но если вы оставите PE открытым до тех пор, пока не захотите снова возобновить процесс, все будет работать нормально. Если вы беспокоитесь о ресурсах, которые Process Explorer может потреблять при его открытии, вы можете просто сделать «Просмотр» -> «Скорость обновления» -> «Приостановлено».

ответил 6 мая 2020 в 14:57

KeyC0de's user avatar

1 золотой значок
6 серебряных значков
19 бронзовых знаков

Здесь есть еще несколько методов, которые можно добавить, если мы будем тщательны:

1) В дополнение к кнопке Pause/Break вы можете продублировать ее функциональность, используя “CTRL+C”.

Это приведет к паузе сценария cmd и спросит вас, хотите ли вы его завершить. Как только вы закончите поиск, вы можете выбрать «НЕТ» (или, возможно, да, если вам это подходит), и он продолжится (или выйдет, если вы выбрали «да»).

2) Вы также можете сделать паузу с помощью мыши, щелкнув курсором мыши в окне, чтобы выбрать текст из терминала CMD.

Возможно, вы замечали эту приостановку вывода в прошлом и думали, что задерживается только вывод, однако, когда скрипты выполняются в интерактивных экземплярах cmd, вы фактически приостанавливаете выполнение кода (так же, как с «Pause/Break ” и “CTRL+C”).

Однако, как только окно потеряет фокус или вы щелкнете, чтобы отменить паузу, выполнение кода продолжится, и у вас нет возможности завершить код таким образом.

ответил 14 ноя 2016 в 19:08

Ben Personick's user avatar

Содержание

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

Sleep and wait
рис. Спи и жди

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

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

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

timeout-help
рис. помощь по тайм-ауту

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

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

Тайм-аут /t 10
” отложит выполнение скрипта на 10 секунд. Окно консоли будет отсчитывать оставшееся время.

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

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

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

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

вычислить && тайм-аут 5 && блокнот

calc && timeout 3 && блокнот && timeout 4 && regedit

Это откроет калькулятор, затем подождите 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, как показано ниже:

 powershell -ExecutionPolicy Bypass -Command "Start-Sleep -Seconds 5" 

Приведенная выше команда будет ждать 5 секунд. Обратите внимание: метод 5 является сокращенной формой метода 6 .

 powershell -ExecutionPolicy Bypass -Command "Start-Sleep -MilliSeconds 500" 

Приведенная выше команда будет ждать 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
и поэтому в консоли не отображается никакой информации.

ping dealy example

Jinku Hu avatar

Jinku Hu avatar

Основатель DelftStack.com. Джинку работает в робототехнике и автомобилестроении более 8 лет. Он оттачивал свои навыки кодирования, когда ему нужно было выполнять автоматическое тестирование, сбор данных с удаленных серверов и создание отчетов по результатам испытаний на выносливость. Он имеет опыт работы в области электротехники/электроники, но расширил свой интерес к встроенной электронике, встроенному программированию и внешнему/внутреннему программированию.

Используйте команду TIMEOUT для задержки выполнения

TIMEOUT
Команда используется для задержки выполнения команды на несколько секунд или минут. Его можно использовать только в пакетном файле.

Диапазон для TIMEOUT
команда варьируется от -1 до 100000. Если для задержки установлено значение -1, она будет действовать как команда паузы, чтобы дождаться нажатия клавиши.

Как и в приведенной выше команде, мы можем заменить /wait
вставив TIMEOUT
команда с помощью /t
параметр. Синтаксис для TIMEOUT
команда приведена ниже:

Возьмем приведенный выше пример и добавим временную задержку в 30 секунд после выполнения первой программы. Код для того же показан ниже.

 START /B JRuler.exe
TIMEOUT /t 
START /B systeminfo >> output.txt

  

testfile timeout command

output timeout command

output timeout command after execution

Хотя вы можете остановить задержку, нажав Ctrl
+ С
что повысит errorlevel1.

Пакетный сон с тайм-аутом (> Windows 7 / 2008)

timetout
задерживает выполнение на заданные секунды.

 timeout <seconds> /nobreak

  

<seconds>
любое значение от -1 до 100000. -1
заставляет компьютер бесконечно ждать нажатия клавиши.

timeout
Пример сна летучей мыши

Приостановится на 5 секунд перед следующим выполнением.

batch timeout example

Используйте команду PAUSE, чтобы приостановить выполнение

   START /B системная информация >> output.txt
  
  


  

testfile pause command

output pause command

Все перечисленные выше методы работают нормально. Если вы используете START команда, рекомендуется использовать /wait вместо команд задержки, так как процесс может занять больше времени, чем указано.

Используйте /WAIT для ожидания завершения выполнения команды

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

Также параметр /B используется, чтобы оставаться в том же процессе без создания нового окна. START команда без /B Параметр открывает программу или команду в новом окне.

Ожидание завершения выполнения команды

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

 START /B systeminfo >> output.txt

  

wait for a command to finish

output cmd

Ждать .exe
Файл для завершения выполнения

Другой пример: нам нужно запустить .exe
файл и дождитесь полного завершения выполнения.

   START /B /WAIT JRuler.exe
  
  
    START /B системная информация >> output.txt
  
  


  

wait for an exe to finish

output cmd waiting for an exe file to finish

Как только вы закроете .exe файл, вторая программа начнет выполнение. cmd /k в последней строке используется для предотвращения выхода из командной строки после выполнения.

Если программ несколько, можно использовать /WAIT с каждой командой, чтобы дождаться завершения выполнения. START команда с помощью /WAIT параметр не имеет таймаута, т. е. не имеет значения, сколько времени займет завершение процесса; он будет ждать, пока процесс не будет завершен.

 START /WAIT install1.exe
START /WAIT install2.exe

  

/WAIT
можно использовать только с START
команда. Мы можем вставить временную задержку для других команд, используя TIMEOUT
и PAUSE
команды.

Оставьте комментарий