Возможный дубликат:
Как спать в батнике?
Вот хакерский способ сделать паузу на секунду в пакетном файле:
PING 400.500.600.700 > NUL
Я погуглил, но не уверен, что есть лучшие ... есть идеи? :)
Правильный способ сделать это - использовать timeout
команда, представленная в Windows 2000.
Чтобы подождать 30 секунд:
timeout /t 30
Тайм-аут будет прерван, если пользователь нажмет любую клавишу; однако команда также принимает необязательный переключатель /nobreak
, который фактически игнорирует все, что пользователь может нажать, кроме явного CTRL-C
:
timeout /t 30 /nobreak
Кроме того, если вы не хотите, чтобы команда печатала обратный отсчет на экране, вы можете перенаправить ее вывод на NUL
:
timeout /t 30 /nobreak > NUL
Вы можете использовать параметры «выбор по умолчанию» и «тайм-аут» встроенной команды выбора для создания задержки.
@echo off
echo Hi, I'm doing some stuff
echo OK, now I need to take a breather for 5 seconds...
choice /d y /t 5 > nul
echo Times up! Here I go again...
@echo off
echo It is time for liftoff.
timeout /t 5
echo Commencing crash sequence.
timeout /t 5
Нажатие клавиши отменяет обратный отсчет - единственный недостаток.
Вот что я использовал вместо sleep.exe,
@ping -n 1 -w 1000 0.0.0.1 > NUL
+ Изменить -n x
ждать (примерно) x
секунд.
По-видимому в комплекте ресурсов Windows есть команда сна. Другой Места также рекомендую использовать выбор .....
Команда CHOICE с таймером работает хорошо ...
ВЫБОР / C: x / T: x, 10> NUL
Существуют также "программы", которые можно запускать, например, WAIT, SLEEP и т. Д.
Надеюсь это поможет.
Пинг (см. Выше) - хороший, но работает только при подключении к сети.
Ниже приведен фрагмент сценария, который задерживает:
@echo off
set / a secondsend =% ВРЕМЯ: ~ 6,2% + 10
если задано% secondsend% GTR 59 / a secondsend = secondsend-60
:жди здесь
if% TIME: ~ 6,2% NEQ% secondsend% goto ждать здесь
Это будет пауза между 9-10 секундами (первая секунда неточна из-за использования команды TIME - и может быть половина секунды до того, как вы начнете).
Если работает, установив "secondsend" на текущую секунду часов ПК, а затем прибавив к ней 10 (задержка). Если он больше 59, снимите 60, так как он переносится на следующую минуту. Затем есть цикл, который проверяет текущую секунду с помощью 'secondsend' - как только они совпадают, сценарий продолжается.
Если вы хотите отложить на другой период 2-59, измените 10 во второй строке (я говорю 2-59, поскольку первая секунда может быть не полной секундой, поэтому 2 может быть, например, 1,2 секунды).
Извините, это так долго, но я подумал, что объясню, как работает рутина.
Я просто написал простой exe на C #. Просто используйте статический System.Threading.Sleep, возьмите аргумент командной строки и преобразуйте его в целое число.
На это ушло 5 минут.