32 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как сделать паузу в bat файле

Задержка времени (пауза, тайм-аут) в бат-файле

Вот, нашёл в Сети рабочий пример для устройства задержки времени
(пауза, тайм-аут) при выполнении команды в bat-файле:

echo wscript.Sleep 30000>”%temp%sleep30.vbs”
cscript //nologo “%temp%sleep30.vbs”
del “%temp%sleep30.vbs”

Работает в любой ОС 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:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windowstemp 2>nul

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

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

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

echo wscript.Sleep 30000>”%temp%sleep30.vbs”
cscript //nologo “%temp%sleep30.vbs”
del “%temp%sleep30.vbs”
cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windowstemp 2>nul

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

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

Синтаксис
TIMEOUT [/T] 50 [/NOBREAK]

Параметры

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

TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

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

Как сделать паузу в bat файле

Рассмотрим основные варианты организации ожидания ( паузы ) в bat / cmd файлах.

Для решения этой задачи в операционных системах, начиная с VISTA, присутствует команда timeout. Так, для ожидания 10 секунд следует выполнить команду.

Если не использовать параметр /NOBREAK, то ожидание может быть прервано нажатием любой клавиши.

Поскольку эта задача вставала перед разработчиками задолго до появления этой утилиты, те, у которых операционная система младше, могут воспользоваться накопившемся опытом.
Для организации паузы есть специальная утилита, входящая в состав Resource Kit (Ресурскита).
Пакеты Microsoft Windows Deployment Kit и Windows Resource Kit бесплатно распространяется microsoft.com. Этот пакет содержит ряд полезных и. как бы так сказать. других утилит.

Если вы уже устали бродить по бескрайним просторам сайта microsoft.com, постоянно возвращаясь на одни и те же страницы, то можете скачать эту утилиту здесь

Как и во многих других случаях, может помочь утилита nircmd.
(На момент написания страницы описание возможностей утилиты было здесь. C этим списком я рекомендую ознакомится, даже если для текущей задачи будет использовано другое решение.)

Читать еще:  Как сделать квас из сухого кваса

На просторах интернета можно найти утилиту wait.exe. Точнее, даже несколько разных, включая исходные тексты программы. Поэтому я не привожу здесь параметров вызова, смотрите их описание.

Для организации паузы можно использовать утилиты, ожидающих определенное событие заданное время.
При условии, что событие не наступит, получается ожидание требуемого интервала времени.
Так, паузу можно создать при помощи команды ping:

-n 1 – выполнить один запрос
-w 100000 – ждать ответа 100 секунд
(значение указывается в миллисекундах)
10.10.254.254 – IP адрес, который заведомо не существует в локальной сети (важно!), следовательно, никогда не ответит на ping т. е. событие не наступит.
>nul – перенаправление всего вывода команды ping в никуда.

Еще одно решение – посылать пинг на заведомо существующий адрес – т. е. самому себе. Количество посылаемых пакетов должно быть на единицу больше количества ожидаемых секунд. Так, для ожидания 5 секунд следует выполнить команду:

В том же пакете Ресурскит есть утилита choice, которую при известной доле извращенности можно использовать для тех же целей:

Для любителей экзотики.
Можно вычислить время окончания интервала ожидания и занять чем-то несчастный процессор до наступления этого события. Как результат – пауза организована только средствами bat / cmd.
Привожу слегка исправленный пример, взятый с сайта https://www.oszone.net.

0,-3% :: пауза на 15 секунд call :sleep 15 :: Другие действия echo Сейчас %time:

0,-3% pause goto :EOF :sleep echo Пауза на %1 секунд. set /a ftime=100%time:

6,-3%%%100+%1 if %ftime% GEQ 60 set /a ftime-=60 :loop set ctime=%time:

6,-3% if /i %ftime% NEQ %ctime% goto :loop exit /b 0

Данная процедура позволит организовать задержку в выполнении. Время ожидания должно быть меньше 60 сек.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Как спать в течение 5 секунд в командном файле /cmd?

592 太極者無極而生 [2009-11-04 11:13:00]

Средство Windows Snipping может захватывать экран, но иногда я хочу сделать снимок через 5 секунд, например, сделать снимок, отображаемый веб-камерой. (Запустите скрипт и улыбнитесь камере, например).

Мой вопрос: как спать в течение 5 секунд в пакетном файле?

command-line windows sleep timeout batch-file

32 ответа

744 Решение Martin [2009-11-04 11:20:00]

Один из способов – использовать (пропустить) команду ping:

  • ping – системная утилита, которая отправляет запросы ping. ping доступен во всех версиях Windows.
  • 127.0.0.1 – это IP-адрес локального хоста. Этот IP-адрес гарантированно всегда разрешается, доступен и немедленно реагирует на пинги.
  • -n 6 указывает, что должно быть 6 пингов. Между каждым пингом задержка составляет 1 с, поэтому для задержки 5 с необходимо отправить 6 пингов.
  • > nul подавить вывод ping , перенаправив его на nul .

1283 asveikau [2009-11-04 11:29:00]

Я очень удивлен, что никто не упомянул:

N.B. Обратите внимание, однако (спасибо Dan!), что timeout 5 означает:

Спящий режим между 4 и 5 секундами

Это можно проверить эмпирически, поместив следующее в командный файл, повторив его и вычислив разницу во времени между первым и вторым echo s:

64 Adam Porad [2010-05-05 21:48:00]

Попробуйте выполнить команду Choice. Это было с MSDOS 6.0 и должно было сделать трюк.

Используйте параметр /T, чтобы указать время ожидания в секундах и параметр /D, чтобы указать выбор по умолчанию и игнорировать выбранный выбор.

Читать еще:  Как сделать маску из кокоса

Единственное, что может быть проблемой, заключается в том, что пользователь вводит один из символов выбора до истечения периода ожидания. Частичная обработка – это обфускация ситуации – используйте аргумент /N, чтобы скрыть список допустимых вариантов и только один символ в наборе вариантов, поэтому будет менее вероятно, что пользователь будет вводить правильный выбор до истекает время ожидания.

Ниже приведен текст справки в Windows Vista. Я думаю, что это то же самое на XP, но посмотрите на текст справки на компьютере XP, чтобы проверить.

49 noctonura [2009-11-04 11:20:00]

Следующий хак позволит вам поспать 5 секунд

Поскольку пинг ждет секунду между пингами, вам нужно указать еще один, чем вам нужно.

33 Alex [2014-03-03 19:59:00]

Вы можете сделать это с помощью timeout :

Это будет видно: timeout 5

Это не будет видно timeout 5 >nul

Если у вас есть PowerShell в вашей системе, вы можете просто выполнить эту команду:

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

Это занимает время, когда была выписана команда Windows, а powershell script спящий до 5 секунд после этого времени. Таким образом, пока PowerShell занимает меньше времени, чем ваша продолжительность сна, этот подход будет работать (он составляет около 600 мс на моей машине).

28 joe li [2012-10-31 21:14:00]

Не можем ли мы сделать waitfor /T 180 ?

waitfor /T 180 pause приведет к ошибке “ОШИБКА: время ожидания ожидания” пауза “”.

waitfor /T 180 pause >nul развернет эту “ошибку” под ковриком

Команда waitfor должна присутствовать в ОС Windows после Win95

В прошлом я загрузил исполняемый файл с именем sleep , который будет работать в командной строке после того, как вы поместите его в свой путь.

Например: sleep shutdown -r -f /m \yourmachine хотя shutdown теперь имеет опцию -t, встроенную в

22 Jonathan [2013-07-28 16:26:00]

Timeout /t 1 >nul

Как пауза в 1 секунде, вы можете взять известкование до почти 100 000 (99,999). Если вы подключены к Интернету, лучшим решением будет:

ping 1.1.1.1. -n 1 -w 1000 >nul

Когда вы выполняете ping, вы рассчитываете в миллисекундах, поэтому одна секунда будет 1000 миллисекунд. Но команда ping немного, но она не работает на автономных машинах. Проблема в том, что машина запуталась, потому что она отключена, и она хотела бы пинговать website/server/host/ip , но это невозможно. Поэтому я бы порекомендовал тайм-аут. Удачи!

17 Amir [2016-02-19 23:45:00]

SLEEP 5 был включен в некоторые комплекты ресурсов Windows.

TIMEOUT 5 был включен в некоторые из наборов ресурсов Windows, но теперь является стандартной командой в Windows 7 и 8 (не уверен в Vista).

PING 1.1.1.1 -n 1 -w 5000 >NUL Для любой версии MS-DOS или Windows с клиентом TCP/IP PING можно использовать для задержки выполнения в течение нескольких секунд.

NETSH badcommand (только для Windows XP/Server 2003) или CHOICE

10 Ned Martin [2014-07-12 05:03:00]

Во-первых, чтобы задержать командный файл, просто без всех тупых методов, которые люди предлагали:

Во-вторых, стоит упомянуть, что, хотя он может не делать именно то, что вы хотите, используя встроенный инструмент обрезки Windows, вы можете запускать его без использования мыши. Запустите инструмент для отрезки, выйдите из текущего среза, но оставьте инструмент включенным и нажмите “Control + Print Screen”, когда вы хотите, чтобы snip произошел. Это не должно мешать тому, что вы пытаетесь отрезать.

Читать еще:  Как оформить мини-дом: 3 простых совета

10 gregmac [2012-11-06 00:01:00]

Я пытался сделать это из задачи msbuild, а выбор и таймаут не работали из-за перенаправления ввода-вывода.

В итоге я использовал sleep.exe из https://sourceforge.net/projects/unxutils, что приятно, потому что он не требует установки и крошечный.

Попытка с помощью choice :

Попытка с помощью timeout :

Я использую , потому что я выполняю dbghost.exe несколько раз параллельно и создает временные файлы/базы данных на основе текущей эпохи в секундах, что, конечно же, означает, что вы запускаете несколько экземпляров, каждый из них использует то же имя temp. Первоначально я пытался использовать команду MSBuild Extension Pack Thread.Sleep , но кажется, что (как правило) она выполняла задачу сна, но затем запускала задачу во всех потоках одновременно и, конечно, dbghost. exe потерпит неудачу с конфликтами. До сих пор использование sleep.exe кажется более надежным.

Я сделал это. Он работает и показывает время в секундах. Если вы хотите использовать его, добавьте в пакетный файл:

Он работал, когда я тестировал его.

Список wait.bat (он должен находиться в рабочем каталоге или windir/system32/ ):

Это последняя версия того, что я использую на практике в течение десяти секундной паузы, чтобы увидеть результат, когда заканчивается script.

Выполненное эхо позволяет увидеть, когда закончится script, а ping обеспечивает задержку. Дополнительные знаки @означают, что я вижу “сделанный” текст, и ожидание происходит без меня, отвлекаясь на их команды.

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

Это, казалось, дало трехмесячную задержку, как ожидалось. Одна попытка ping длится 3 секунды.

Это заняло около 10 секунд (не 5). Мое объяснение состоит в том, что есть 5 попыток пинга, каждый примерно на секунду, делая 4 секунды. И каждая попытка пинга, вероятно, продолжалась около секунды, составляя в общей сложности 9 секунд.

Я тоже пробовал это, прочитав, что комментарии могут быть добавлены в файлы BAT с использованием двух последовательных двоеточий. Однако программное обеспечение вернулось почти мгновенно. Положив комментарий на собственную строку до того, как пинг работал нормально.

Чтобы лучше понять, что делает ping на практике, я побежал

Это заняло около 30 секунд, хотя 5 * 5 = 25. Мое объяснение состоит в том, что в течение 5 секунд есть 5 попыток пинга, но между попытками пинга есть 1 секунда задержки: по крайней мере, есть небольшая причина ожидать другого результата, если вы снова будете пингом, и лучше дать сети немного времени, чтобы оправиться от любой проблемы, с которой она столкнулась.

Изменить: украдено из другое сообщение. RFC 3330 говорит, что IP-адрес 192.0.2.0 не должен появляться в Интернете, поэтому проверка этого адреса не позволяет этим тестам спамить кого-либо! Я изменил текст выше, соответственно!

Источники:

https://tehnopost.info/computer/27-zaderjka-v-bat-files.html
https://celitel.info/klad/nhelp/helpbat.php?dcmd=ex_wait
https://qarchive.ru/14791_kak_spat__v_techenie_5_sekund_v_komandnom_fai_le__cmd_

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов:
Для любых предложений по сайту: [email protected]