Windows的Snipping工具可以捕捉屏幕,但有时我想在五秒钟后捕捉屏幕,例如拍摄网络摄像头显示的图像。(例如,运行脚本并对着镜头微笑。)
如何在批处理文件中休眠5秒?
Windows的Snipping工具可以捕捉屏幕,但有时我想在五秒钟后捕捉屏幕,例如拍摄网络摄像头显示的图像。(例如,运行脚本并对着镜头微笑。)
如何在批处理文件中休眠5秒?
当前回答
ping在超时前等待大约5秒,而不是如上所述的1秒。也就是说,除非你告诉它在超时前只等待1秒。
ping 1.0.0.1-n 1-w 1000
将ping一次,只等待1秒(1000毫秒)的响应,然后超时。
因此,大约20秒的延迟将是:
ping 1.0.0.1-n 20-w 1000
其他回答
下面的黑客让你睡5秒钟
ping -n 6 127.0.0.1 > nul
由于ping在两次ping之间等待一秒钟,因此您必须指定一次以上的ping。
如果系统上有PowerShell,则只需执行以下命令:
powershell -command "Start-Sleep -s 5"
编辑:人们提出了一个问题,即与您尝试等待的时间相比,powershell启动所需的时间非常长。如果等待时间的准确性很重要(即一秒或两秒的额外延迟是不可接受的),您可以使用此方法:
powershell -command "$sleepUntil = [DateTime]::Parse('%date% %time%').AddSeconds(5); $sleepDuration = $sleepUntil.Subtract((get-date)).TotalMilliseconds; start-sleep -m $sleepDuration"
这会占用发出windows命令的时间,而powershell脚本将休眠到该时间后的5秒。因此,只要powershell的启动时间比睡眠时间短,这种方法就会奏效(在我的机器上大约是600毫秒)。
在Windows xp sp3中,可以使用sleep命令
如果你有选择或ping,这是可行的。
@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并运行它
这是我在实践中使用的最新版本,在脚本完成时暂停10秒以查看输出。
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
echo完成后,我可以看到脚本何时完成,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次ping尝试,每次间隔约一秒,持续4秒。每一次ping尝试大概持续一秒,估计总共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文件之后。然而,软件几乎立即返回。在ping之前将评论放在自己的行上,效果很好。
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次ping尝试,每次持续5秒,但两次ping尝试之间大约有1秒的时间延迟:如果您立即再次ping,那么根本没有理由期待不同的结果,最好给网络一点时间来从任何问题中恢复。
编辑:从其他帖子中窃取。。RFC 3330说IP地址192.0.2.0不应该出现在互联网上,所以ping这个地址可以防止这些测试向任何人发送垃圾邮件!我已经相应地修改了上面的文本!