При написании командного файла для автоматизации чего-либо на Windows-боксе мне нужно было приостановить его выполнение на несколько секунд (обычно в цикле тестирования / ожидания, ожидая запуска процесса). В то время лучшее решение, которое я мог найти, использует ping (я не шучу) для достижения желаемого эффекта. Я нашел лучшую рецензию его здесь , который описывает вызываемый «wait.bat», осуществляется следующим образом :
@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul
Затем вы можете включить вызовы wait.bat в свой собственный пакетный файл, передав количество секунд, в течение которых он переходит в режим ожидания.
Очевидно, Windows 2003 Resource Kit предоставляет Unix-подобную команду сна (наконец-то!). В то же время, для тех из нас, кто все еще использует Windows XP, Windows 2000 или (к сожалению) Windows NT , есть ли лучший способ?
Я изменил sleep.py
скрипт в принятом ответе , так что по умолчанию он равен одной секунде, если в командной строке не передано никаких аргументов:
import time, sys
time.sleep(float(sys.argv[1]) if len(sys.argv) > 1 else 1)
источник
ping
команды или загрузите набор ресурсов Windows, который включаетsleep
команду. Более подробная информация здесь: Пакетный файл SLEEP CommandОтветы:
ОБНОВИТЬ
Команда
timeout
, доступная в Windows Vista и далее, должна быть используемой командой, как описано в другом ответе на этот вопрос. Ниже следует старый ответ.Старый ответ
Если у вас установлен Python или вы не против его установить (он также используется и в других целях :), просто создайте следующий скрипт sleep.py и добавьте его где-нибудь в вашей переменной PATH:
Это позволит делать субсекундные паузы (например, 1,5 с, 0,1 и т. Д.), Если у вас есть такая необходимость. Если вы хотите назвать его как,
sleep
а не какsleep.py
, то вы можете добавить.PY
расширение в переменную среды PATHEXT. В Windows XP вы можете редактировать его в:Мой компьютер → Свойства (меню) → Дополнительно (вкладка) → Переменные среды (кнопка) → Системные переменные (рамка)
источник
Команда
timeout
доступна в Windows Vista и более поздних версиях:Примечание: он не работает с перенаправлением ввода - тривиальный пример:
источник
timeout
, добавленная @Cristian Ciupitu, частично неправильно - Windows XP не имеет эту команду.Используя
ping
описанный выше метод, я делаю это, когда не могу (или не хочу) добавлять дополнительные исполняемые файлы или устанавливать любое другое программное обеспечение.Вы должны быть то , что не существует пинг, и используя
-w
флаг так , чтобы он не после этого промежутка времени, не пинг то , что это есть (как локальный хост)-n
раз. Это позволяет обрабатывать время менее секунды, и я думаю, что это немного более точно.например
(проверить, что 1.1.1.1 не принято)
источник
PING: transmit failed. General failure.
1.1.1.1
CloudFlare захватывает IP , так что это будет ждать не 15 секунд, а около нескольких мс.SLEEP.exe
входит в большинство комплектов ресурсов, например, комплект ресурсов Windows Server 2003, который также можно установить в Windows XP.источник
Я не согласен с ответами, которые нашел здесь.
Я использую следующий метод, полностью основанный на возможностях Windows XP, чтобы сделать задержку в командном файле:
DELAY.BAT:
Вы также можете вставить день в расчет, чтобы метод также работал, когда интервал задержки превышал полночь.
источник
TIME
команде.%TIME%
используете запятую, чтобы отделить центсекунды, а не точку! Просто добавьте запятую вDELIMS=:.,"
...Я столкнулся с подобной проблемой, но я просто выбил очень короткое консольное приложение C ++, чтобы сделать то же самое. Просто запустите MySleep.exe 1000 - возможно, проще, чем скачать / установить весь комплект ресурсов.
источник
В Server Fault, был задан похожий вопрос , и решение было:
источник
CHOICE
мне версиях, если кто-то нажимает кнопку во время ожидания, что иногда делают нетерпеливые люди, то выбор зарегистрирует вход, выдаст системный звуковой сигнал для плохого ввода и остановит таймер обратного отсчета, что означает, что он зависнет. там, если они не нажимают N или Y. И если они просто нажимают одну из этих двух, тогда выбор заканчивается прямо здесь, вместо ожидания 5. Кроме того, этот выбор использует действительно странный синтаксис Vista. Все нормальные команды выбора вместо этого использовали быCHOICE /T:Y,5 > NUL
для этого. Там нет/D
флага в старых версиях./C:YN
или просто/C:Y
это не сработает, если у кого-то есть, скажем, шведская команда выбора, которая, вероятно, будет делать [J, N] по умолчанию. Так что это попадает во все виды неприятностей.Вы можете использовать слой WSH cscript для Windows и этот файл JavaScript wait.js :
источник
В зависимости от ваших потребностей совместимости, используйте
ping
:например, подождать 5 секунд, используйте
или на Windows 7 или более поздней версии
timeout
:источник
-w
в миллисекундах,-n
это просто количество пингов, а время по умолчанию между пингами - секунда.Вы можете использовать пинг:
Это будет ждать 10 секунд.
Причина, по которой вы должны использовать 11, заключается в том, что первый пинг пропадает сразу, а не через одну секунду. Число всегда должно быть на единицу больше, чем количество секунд, которое вы хотите подождать.
Имейте в виду, что цель
-w
состоит не в том, чтобы ждать одну секунду. Это гарантирует, что вы будете ждать не более одной секунды в случае возникновения проблем с сетью.ping
сам отправит один ICMP-пакет в секунду. Это, вероятно, не требуется для localhost, но старые привычки сильно умирают.источник
-w
был тайм-аут (хотя я допускаю, что некоторые могут сделать вывод, что из-за моей неясности), он фактически используется для ограничения времени цикла, когда возникают проблемы с сетью, из-за которых каждый цикл занимает больше, чем выделено второй. Я добавил параграф до конца, чтобы прояснить это.Есть лучший способ спать, используя пинг. Вы захотите пропинговать адрес, который не существует, поэтому вы можете указать время ожидания с точностью до миллисекунды. К счастью, такой адрес определен в стандарте (RFC 3330), и это так
192.0.2.x
. Это не выдумка, это действительно адрес с единственной целью несуществования (это может быть непонятно, но это применимо даже в локальных сетях):Чтобы спать в течение 123 миллисекунд, используйте
ping 192.0.2.1 -n 1 -w 123 >nul
источник
-n
параметру.ping 192.0.2.1
на этом ПК с Windows, и вы увидите, что стек TCP / IP Windows отвечает на эхо-запросы. Сколько людей знают, что 192.0.2.0/24 не следует использовать для статического адреса IPv4?127.255.255.255
поскольку это адрес широковещательного шлейфа в Windows, который уже назначен по умолчанию (Вы можете подтвердить это, запустивroute print
в cmd и просматривая таблицу маршрутов IPv4, которую он печатает).Если у вас есть PowerShell в вашей системе, вы можете просто выполнить эту команду:
Изменить: из моего ответа на аналогичную тему , люди подняли вопрос о том, сколько времени требуется PowerShell, чтобы начать, по сравнению с тем, сколько времени вы пытаетесь ждать. Если важна точность времени ожидания (т. Е. Дополнительная или вторая задержка не приемлема), вы можете использовать этот подход:
Это занимает время, когда была введена команда windows, и сценарий powershell спит до 5 секунд после этого времени. Так что, пока PowerShell требует меньше времени для запуска, чем продолжительность сна, этот подход будет работать (на моей машине это около 600 мс).
источник
Например, чтобы скрипт выполнял непрерывное 2-секундное ожидание:
Это означает, что сценарий будет ждать 2 секунды, прежде чем продолжить.
По умолчанию нажатие клавиши прерывает тайм-аут, поэтому используйте
/nobreak
переключатель, если вы не хотите, чтобы пользователь мог прервать (отменить) ожидание. Кроме того, время ожидания предоставит посекундные уведомления, чтобы уведомить пользователя о том, сколько еще осталось ждать; это можно удалить, отправив командуNUL
.редактировать: как @martineau указывает в комментариях ,
timeout
команда доступна только в Windows 7 и выше. Кроме того,ping
команда использует меньше процессорного времени, чемtimeout
. Я все еще верю в использование,timeout
где это возможно, хотя, поскольку это более читабельно, чемping
«взломать». Узнайте больше здесь .источник
ping
подход использует меньше процессорного времени.Просто поместите это в ваш пакетный файл, где вы хотите ждать.
источник
В блокноте напишите:
Теперь сохраните как wait.bat в папке C: \ WINDOWS \ System32, затем, когда вы захотите подождать, используйте:
источник
ping
что-то не один раз, и использовать-w Timeout
опцию для времени задержки в миллисекундах, а не-n Count
опцию полного числа повторов.-w Timeout
может быть и лучше, но я убедился, что он пингует еще раз, чем введенное время.Пакет ресурсов всегда включал это. По крайней мере, с Windows 2000.
Кроме того, в пакете Cygwin есть
sleep
- plop, который входит в вашу PATH, и включаетcygwin.dll
(или как он там называется) и путь!источник
Мне нравится ответ Аасини . Я добавил его для обработки дня, а также включил обработку секунд (
%TIME%
выходных данныхH:MM:SS.CC
):источник
Я использовал эту программу сна C #. Возможно, вам будет удобнее, если вы предпочитаете C #:
источник
Еще более легким, чем решение Python, является однострочный Perl.
Чтобы поспать семь секунд, поместите это в скрипт BAT:
Это решение обеспечивает разрешение только в одну секунду.
Если вам нужно более высокое разрешение, используйте модуль Time :: HiRes из CPAN. Он обеспечивает то,
usleep()
что спит в микросекундах, аnanosleep()
какое - в наносекундах (обе функции принимают только целочисленные аргументы). См. Вопрос переполнения стека. Как мне спать на миллисекундах в Perl? для дальнейших деталей.Я использовал ActivePerl в течение многих лет. Это очень легко установить.
источник
Или командная строка Python, например, за 6 с половиной секунд:
источник
Использование пинга - это хорошо, если вы просто хотите «немного подождать». Это связано с тем, что вы зависите от других функций, таких как ваша сеть и тот факт, что на 127.0.0.1 ничего не отвечает. ;-) Может быть, это не очень вероятно, что это не удастся, но это не невозможно ...
Если вы хотите быть уверены, что вы ждете точно указанное время, вы должны использовать
sleep
функциональность (которая также имеет то преимущество, что она не использует мощность процессора или ожидает готовности сети).Найти уже готовый исполняемый файл для сна - самый удобный способ. Просто поместите его в свою папку Windows или любую другую часть стандартного пути, и он всегда доступен.
В противном случае, если у вас есть среда компиляции, вы можете легко создать ее самостоятельно.
Sleep
Функция доступнаkernel32.dll
, так что вам просто нужно использовать , что один. :-) Для VB / VBA объявите следующее в начале вашего источника, чтобы объявить функцию сна:Для C #:
Вы найдете здесь больше об этой функции (доступно с Windows 2000) в спящем режиме (MSDN).
В стандарте C
sleep()
он включен в стандартную библиотеку, а в Microsoft Visual Studio C эта функция называетсяSleep()
, если мне не изменяет память. ;-) Эти два принимают аргумент в секундах, а не в миллисекундах, как два предыдущих объявления.источник
Лучшее решение, которое должно работать на всех версиях Windows после Windows 2000:
источник
'timeout' is not recognized as an internal or external command, operable program or batch file.
Pathping.exe может спать меньше секунды.
,
источник
Я впечатлен этим:
http://www.computerhope.com/batch.htm#02
Технически вы говорите
choice
команде принять только y. По умолчанию используется значение y, чтобы сделать это за 5 секунд, не выводить подсказки и выводить все, что говорит NUL (например, нулевой терминал в Linux).источник
CHOICE
мне версиях, если кто-то нажимает клавишу во время ожидания, что иногда делают нетерпеливые люди, то выбор прочитает ввод, выдаст системный звуковой сигнал о неправильном вводе и остановит обратный отсчет, поэтому он зависнет, если не нажать Y. И если они просто нажимают Y, то выбор заканчивается тут, вместо того, чтобы ждать 5. Кроме того, этот выбор использует действительно странный синтаксис Vista. Обычные команды выбора вместо этого используютCHOICE /T:Y,5 > NUL
для этого. (В старых версиях нет флага / D). И если у вас Vista, используйтеTIMEOUT
вместо этого.Вы также можете использовать файл .vbs для определенных таймаутов:
Код ниже создает файл .vbs. Поместите это в верхней части кода rbatch:
Затем приведенный ниже код открывает файл .vbs и указывает, как долго ждать:
В приведенном выше коде «1000» - это значение временной задержки, отправляемой в файл .vbs в миллисекундах, например, 1000 мс = 1 с. Вы можете изменить эту часть так долго, как вы хотите.
Код ниже удаляет файл .vbs после того, как вы закончите с ним. Поместите это в конец вашего командного файла:
И вот код все вместе, поэтому его легко скопировать:
источник
Начиная с Windows Vista, у вас есть команды TIMEOUT и SLEEP , но чтобы использовать их в Windows XP или Windows Server 2003, вам потребуется набор ресурсов Windows Server 2003 .
Здесь у вас есть хороший обзор альтернатив сна (подход ping является наиболее популярным, поскольку он будет работать на каждой машине с Windows), но есть (по крайней мере) не упомянутое, которое (ab) использует команду
W32TM
(Time Service):Где вы должны заменить N на секунды, которые вы хотите сделать паузу. Кроме того, он будет работать в любой системе Windows без предварительных условий.
Typeperf также можно использовать:
С помощью mshta и javascript (можно использовать для сна менее секунды):
Это должно быть еще точнее (для ожидания менее секунды) - самокомпилируемый исполняемый файл, основанный на
.net
:источник
Есть много способов сделать сон cmd / batch »:
Мой любимый:
Это остановит консоль на 5 секунд без вывода.
Наиболее используемое:
Это попытается установить соединение до
localhost
5 раз. Поскольку он размещен на вашем компьютере, он всегда достигает хоста, поэтому каждую секунду он будет пробовать новое каждую секунду.-n
Флаг указывает на то, сколько раз скрипт будет пытаться соединение. В этом случае это 5, так что это будет длиться 5 секунд.Варианты последнего:
В этом скрипте есть некоторые отличия по сравнению с последним. Это не будет пытаться позвонить
localhost
. Вместо этого он попытается подключиться к1.1.1.1
очень быстрому веб-сайту. Действие будет длиться 5 секунд, только если у вас есть активное подключение к Интернету. Иначе это продлится приблизительно 15, чтобы закончить действие . Я не рекомендую использовать этот метод.Это точно так же, как в примере 2 (чаще всего используется). Также вы можете также использовать:
Вместо этого используется
localhost
версия IPv6 .Есть много способов выполнить это действие. Однако я предпочитаю метод 1 для Windows Vista и более поздних версий и наиболее часто используемый метод (метод 2) для более ранних версий ОС.
источник
Вы можете получить фантазию, поместив сообщение PAUSE в строку заголовка:
источник
Это было проверено на Windows XP SP3 и Windows 7 и использует CScript. Я поставил несколько безопасных предохранителей, чтобы избежать подсказок. (
/q
было бы опасно)Подождите одну секунду:
Подождите 500 мс, а затем запустите вещи после:
sleepOrDelayExecution.bat:
источник
Поскольку другие предлагают сторонние программы (Python, Perl, пользовательские приложения и т. Д.), Другой вариант - GNU CoreUtils для Windows, доступный по адресу http://gnuwin32.sourceforge.net/packages/coreutils.htm .
2 варианта размещения:
Одним из преимуществ развертывания CoreUtils является то, что вы дополнительно получите множество других программ, которые полезны для сценариев (пакет Windows оставляет желать лучшего).
источник