Как спать в течение 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 127.0.0.1 -n 6 > nul
Объяснение:
-
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]
Я очень удивлен, что никто не упомянул:
C:\> timeout 5
N.B. Обратите внимание, однако (спасибо Dan!), что timeout 5
означает:
Спящий режим между 4 и 5 секундами
Это можно проверить эмпирически, поместив следующее в командный файл, повторив его и вычислив разницу во времени между первым и вторым echo
s:
@echo off
echo %time%
timeout 5 > NUL
echo %time%
64 Adam Porad [2010-05-05 21:48:00]
Попробуйте выполнить команду Choice. Это было с MSDOS 6.0 и должно было сделать трюк.
Используйте параметр /T, чтобы указать время ожидания в секундах и параметр /D, чтобы указать выбор по умолчанию и игнорировать выбранный выбор.
Единственное, что может быть проблемой, заключается в том, что пользователь вводит один из символов выбора до истечения периода ожидания. Частичная обработка - это обфускация ситуации - используйте аргумент /N, чтобы скрыть список допустимых вариантов и только один символ в наборе вариантов, поэтому будет менее вероятно, что пользователь будет вводить правильный выбор до истекает время ожидания.
Ниже приведен текст справки в Windows Vista. Я думаю, что это то же самое на XP, но посмотрите на текст справки на компьютере XP, чтобы проверить.
C:\>CHOICE /?
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
Description:
This tool allows users to select one item from a list
of choices and returns the index of the selected choice.
Parameter List:
/C choices Specifies the list of choices to be created.
Default list is "YN".
/N Hides the list of choices in the prompt.
The message before the prompt is displayed
and the choices are still enabled.
/CS Enables case-sensitive choices to be selected.
By default, the utility is case-insensitive.
/T timeout The number of seconds to pause before a default
choice is made. Acceptable values are from 0 to
9999. If 0 is specified, there will be no pause
and the default choice is selected.
/D choice Specifies the default choice after nnnn seconds.
Character must be in the set of choices specified
by /C option and must also specify nnnn with /T.
/M text Specifies the message to be displayed before
the prompt. If not specified, the utility
displays only a prompt.
/? Displays this help message.
NOTE:
The ERRORLEVEL environment variable is set to the index of the
key that was selected from the set of choices. The first choice
listed returns a value of 1, the second a value of 2, and so on.
If the user presses a key that is not a valid choice, the tool
sounds a warning beep. If tool detects an error condition,
it returns an ERRORLEVEL value of 255. If the user presses
CTRL+BREAK or CTRL+C, the tool returns an ERRORLEVEL value
of 0. When you use ERRORLEVEL parameters in a batch program, list
them in decreasing order.
Examples:
CHOICE /?
CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "Select a for option 1 and b for option 2."
CHOICE /C ab /N /M "Select a for option 1 and b for option 2."
49 noctonura [2009-11-04 11:20:00]
Следующий хак позволит вам поспать 5 секунд
ping -n 6 127.0.0.1 > nul
Поскольку пинг ждет секунду между пингами, вам нужно указать еще один, чем вам нужно.
33 Alex [2014-03-03 19:59:00]
Вы можете сделать это с помощью timeout
:
Это будет видно: timeout 5
Это не будет видно timeout 5 >nul
33 Niall Connaughton [2013-05-29 03:00:00]
Если у вас есть PowerShell в вашей системе, вы можете просто выполнить эту команду:
powershell -command "Start-Sleep -s 5"
Изменить: люди подняли проблему, когда количество времени, которое требуется для запуска, будет значительным по сравнению с тем, как долго вы пытаетесь дождаться. Если важна точность времени ожидания (т.е. Вторая или две дополнительные задержки неприемлемы), вы можете использовать этот подход:
powershell -command "$sleepUntil = [DateTime]::Parse('%date% %time%').AddSeconds(5); $sleepDuration = $sleepUntil.Subtract((get-date)).TotalMilliseconds; start-sleep -m $sleepDuration"
Это занимает время, когда была выписана команда 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]
Два ответа:
Во-первых, чтобы задержать командный файл, просто без всех тупых методов, которые люди предлагали:
timeout /t <TimeoutInSeconds> [/nobreak]
http://technet.microsoft.com/en-us/library/cc754891.aspx
Во-вторых, стоит упомянуть, что, хотя он может не делать именно то, что вы хотите, используя встроенный инструмент обрезки Windows, вы можете запускать его без использования мыши. Запустите инструмент для отрезки, выйдите из текущего среза, но оставьте инструмент включенным и нажмите "Control + Print Screen", когда вы хотите, чтобы snip произошел. Это не должно мешать тому, что вы пытаетесь отрезать.
10 gregmac [2012-11-06 00:01:00]
Я пытался сделать это из задачи msbuild, а выбор и таймаут не работали из-за перенаправления ввода-вывода.
В итоге я использовал sleep.exe из http://sourceforge.net/projects/unxutils, что приятно, потому что он не требует установки и крошечный.
Попытка с помощью choice
:
<Target Name="TestCmd">
<Exec Command="choice /C YN /D Y /t 5 " />
</Target>
Результаты в:
TestCmd:
choice /C YN /D Y /t 5
EXEC : error : The file is either empty or does not contain the valid choices. [test.proj]
[Y,N]?
C:\test.proj(5,9): error MSB3073: The command "choice /C YN /D Y /t 5 " exited with code 255.
Попытка с помощью timeout
:
<Target Name="TestCmd">
<Exec Command="timeout /t 5 " />
</Target>
Результаты в:
TestCmd:
timeout /t 5
EXEC : error : Input redirection is not supported, exiting the process immediately. [test.proj]
C:\test.proj(5,7): error MSB3073: The command "timeout /t 5 " exited with code 1.
Помимо
Я использую <Exec Command="sleep 2 & dbghost.exe" />
, потому что я выполняю dbghost.exe несколько раз параллельно и создает временные файлы/базы данных на основе текущей эпохи в секундах, что, конечно же, означает, что вы запускаете несколько экземпляров, каждый из них использует то же имя temp. Первоначально я пытался использовать команду MSBuild Extension Pack Thread.Sleep
, но кажется, что (как правило) она выполняла задачу сна, но затем запускала задачу <exec>
во всех потоках одновременно и, конечно, dbghost. exe потерпит неудачу с конфликтами. До сих пор использование sleep.exe кажется более надежным.
5 user1884308 [2012-12-07 06:31:00]
Я сделал это. Он работает и показывает время в секундах. Если вы хотите использовать его, добавьте в пакетный файл:
call wait 10
Он работал, когда я тестировал его.
Список wait.bat
(он должен находиться в рабочем каталоге или windir/system32/
):
@echo off
set SW=00
set SW2=00
set /a Sec=%1-1
set il=00
@echo Wait %1 second
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC, SW=CC
set /a TFIN=%TBASE%+%100
:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100,
CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC, SW2=CC
if %SW2% neq %SW% goto notype
if %il%==0 (echo Left %Sec% second & set /a Sec=sec-1 & set /a il=il+1)
goto no0
:notype
set /a il=0
:no0
if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
5 user3070485 [2014-09-18 12:07:00]
Это последняя версия того, что я использую на практике в течение десяти секундной паузы, чтобы увидеть результат, когда заканчивается script.
BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul
Выполненное эхо позволяет увидеть, когда закончится script, а ping обеспечивает задержку. Дополнительные знаки @означают, что я вижу "сделанный" текст, и ожидание происходит без меня, отвлекаясь на их команды.
Я пробовал различные решения, приведенные здесь на машине XP, поскольку идея заключалась в том, чтобы иметь командный файл, который запускался на разных машинах, и поэтому я выбрал машину XP, поскольку среда, которая может быть наименее способной.
GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul
Это, казалось, дало трехмесячную задержку, как ожидалось. Одна попытка ping длится 3 секунды.
BAD> ping -n 5 192.0.2.0 > nul
Это заняло около 10 секунд (не 5). Мое объяснение состоит в том, что есть 5 попыток пинга, каждый примерно на секунду, делая 4 секунды. И каждая попытка пинга, вероятно, продолжалась около секунды, составляя в общей сложности 9 секунд.
BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice
Команды недоступны.
BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs
Я тоже пробовал это, прочитав, что комментарии могут быть добавлены в файлы BAT с использованием двух последовательных двоеточий. Однако программное обеспечение вернулось почти мгновенно. Положив комментарий на собственную строку до того, как пинг работал нормально.
GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul
Чтобы лучше понять, что делает ping на практике, я побежал
ping 192.0.2.0 -n 5 -w 5000
Это заняло около 30 секунд, хотя 5 * 5 = 25. Мое объяснение состоит в том, что в течение 5 секунд есть 5 попыток пинга, но между попытками пинга есть 1 секунда задержки: по крайней мере, есть небольшая причина ожидать другого результата, если вы снова будете пингом, и лучше дать сети немного времени, чтобы оправиться от любой проблемы, с которой она столкнулась.
Изменить: украдено из другое сообщение,.. RFC 3330 говорит, что IP-адрес 192.0.2.0 не должен появляться в Интернете, поэтому проверка этого адреса не позволяет этим тестам спамить кого-либо! Я изменил текст выше, соответственно!
4 npocmaka [2015-10-22 19:36:00]
еще два способа работы с XP и выше:
с w32tm
w32tm /stripchart /computer:localhost /period:5 /dataonly /samples:2 1>nul
wtih typeperf:
typeperf "\System\Processor Queue Length" -si 5 -sc 1 >nul
4 Dani [2009-11-04 11:19:00]
Вы можете использовать VBScript, например файл myscript.vbs
:
set wsobject = wscript.createobject("wscript.shell")
do while 1=1
wsobject.run "SnippingTool.exe",0,TRUE
wscript.sleep 3000
loop
Пакетный файл:
cscript myscript.vbs %1
3 Rober [2012-11-04 22:14:00]
Улучшение кода, предложенного пользователем Aacini, имеет разрешение сотых долей секунды и не прерывается, когда время достигает 23: 59: 59,99:
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC
:: Example delay 1 seg.
set /a TFIN=%TBASE%+100
:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC
if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
3 Xavi [2012-12-11 10:02:00]
Самый простой способ я сделал это:
Скачайте Sleep.exe на http://www.sleepcmd.com/. Файл .exe должен находиться в той же папке, что и программа, которую вы написали!
3 Nikos Steiakakis [2009-11-04 11:27:00]
Используя "ping", -n определит тайм-аут только тогда, когда нет ответа на пинг. Проверьте это сообщение о внедрении DELAY в виде пакетного файла.
Команда DELAY реализована как пакетный файл
Я мог бы просто скопировать-вставить важные биты, но весь пост весьма полезен.
3 AjV Jsy [2013-06-17 21:53:00]
Это можно сделать с помощью двух простых строк в пакетном файле: записать временный файл .vbs
в папку %temp%
и вызвать его:
echo WScript.Sleep(5000) >"%temp%\sleep.vbs"
cscript "%temp%\sleep.vbs"
3 Aacini [2011-07-24 13:19:00]
Я использую следующий метод, полностью основанный на возможностях Windows XP для задержки в пакетном файле:
Файл DELAY.BAT
@ECHO OFF
REM DELAY seconds
REM GET ENDING SECOND
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, ENDING=(H*60+M)*60+S+%1
REM WAIT FOR SUCH A SECOND
:WAIT
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, CURRENT=(H*60+M)*60+S
IF %CURRENT% LSS %ENDING% GOTO WAIT
Вы также можете вставить день в вычисление, чтобы этот метод также работал, когда интервал задержки прошел за полночь.
2 user3584216 [2014-04-29 10:13:00]
PING -n 60 127.0.0.1>nul
если ваш сетевой адаптер недоступен.
2 GreenMatt [2010-05-05 22:06:00]
Если у вас есть соответствующая версия Windows и Windows Resource Kit Resource Kit Tools, она включает в себя команду сна для пакетных программ. Подробнее: http://malektips.com/xp_dos_0002.html
1 thebunnyrules [2016-03-25 04:57:00]
Создайте cmd файл с именем sleep.cmd:
REM Usage: SLEEP Time_in_MiliSECONDS
@ECHO off
ping 1.0.0.0 -n 1 -w %1 > nul
Скопировать sleep.cmd в c:\windows\system32
Использование:
sleep 500
Спит на 0,5 секунды. Аргументы в ms. После копирования в System32 можно использовать всюду.
РЕДАКТИРОВАТЬ: Вы также должны быть в отъезде, если машина не подключена к сети (скажем, портативу, которую вы используете в метро), трюк ping больше не работает.
1 Andres [2014-06-27 21:16:00]
В Windows xp sp3 вы можете использовать команду sleep
0 Doctor DOS [2012-04-20 00:10:00]
Хорошо, это работает, если у вас есть выбор или пинг.
@echo off
echo.
if "%1"=="" goto askq
if "%1"=="/?" goto help
if /i "%1"=="/h" goto help
if %1 GTR 0 if %1 LEQ 9999 if /i "%2"=="/q" set ans1=%1& goto quiet
if %1 GTR 0 if %1 LEQ 9999 set ans1=%1& goto breakout
if %1 LEQ 0 echo %1 is not a valid number & goto help
if not "%1"=="" echo.&echo "%1" is a bad parameter & goto help
goto end
:help
echo SLEEP runs interactively (by itself) or with parameters (sleep # /q )
echo where # is in seconds, ranges from 1 - 9999
echo Use optional parameter /q to suppress standard output
echo or type /h or /? for this help file
echo.
goto end
:askq
set /p ans1=How many seconds to sleep? ^<1-9999^>
echo.
if "%ans1%"=="" goto askq
if %ans1% GTR 0 if %ans1% LEQ 9999 goto breakout
goto askq
:quiet
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
goto end
:breakout
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
echo Slept %ans1% second^(s^)
echo.
:end
просто назовите его sleep.cmd или sleep.bat и запустите его
0 LionelGoulet [2016-01-27 02:45:00]
ping ждет около 5 секунд до тайминга, а не 1 секунду, как было указано выше. То есть, если вы не скажете, чтобы он подождал только 1 секунду до выключения времени.
ping 1.0.0.1 -n 1 -w 1000
будет пинговать один раз, ждать только 1 секунду (1000 мс) для ответа, затем тайм-аут.
Таким образом, приблизительно 20-секундная задержка будет:
ping 1.0.0.1 -n 20 -w 1000
0 Shawn [2017-06-06 18:35:00]
Я написал мощную программу wait.exe, где вы передаете ей миллисекундный параметр в пакетном файле
wait 3000
system('c:/windows/system32/SnippingTool.exe')
код для EXE:
FUNCTION PBMAIN()
c$ = Command$
s! = Val(c$)*1000
Sleep s!
END FUNCTION
-1 Smits [2013-12-09 14:34:00]
Это должно сделать трюк: выбор /T 5/N/D Y
Замените 5 временем в секундах, которое вы хотите подождать...
-1 jon [2013-05-15 12:42:00]
В новых версиях ОС Windows вы можете использовать команду
sleep /w2000
в DOS script (.cmd
или .bat
), чтобы подождать 2 секунды (2000 мс - замените время в миллисекундах, которое вам нужно). Будьте осторожны, чтобы включить аргумент /w
- без него весь компьютер засыпает! Вы можете использовать -m
вместо /m
, если хотите, и необязательно двоеточие (:) между w и числом.
-3 Srijan Acharya [2013-03-17 20:43:00]
Я думаю, что следующая команда может помочь:
pause 5
Синтаксис команды pause: пауза d \\, где d - продолжительность в секундах
Я использую Windows 7 (32 бит), но я не знаю других.
-3 scriptmastere02 [2017-12-28 05:10:00]
Есть!
SLEEP <seconds>
Если вы хотите его в миллисекундах:
SLEEP -m <time in milliseconds>
Это более полезно, чем TIMEOUT
, потому что TIMEOUT
может быть прервано нажатием клавиши или CTRL + C
(для TIMEOUT /t <secs> /nobreak
). SLEEP
не может быть отменено ничем (кроме кнопки закрытия: p)
Другой - PING
. Но PING
требуется подключение к Интернету, потому что вы будете записывать соединение с сайтом.
-9 Amir Saniyan [2014-07-09 13:26:00]
Сон - не очень хорошая идея. Позвольте пользователю выбрать, когда он или она будет готов:
pause
Press any key to continue . . .