Назад | Перейти на главную страницу

Лучший способ подождать несколько секунд в файле bat?

Возможный дубликат:
Как спать в батнике?

Вот хакерский способ сделать паузу на секунду в пакетном файле:

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 минут.