Windows的Snipping工具可以捕捉屏幕,但有时我想在五秒钟后捕捉屏幕,例如拍摄网络摄像头显示的图像。(例如,运行脚本并对着镜头微笑。)

如何在批处理文件中休眠5秒?


当前回答

您可以使用超时:

这将是可见的:超时5

这将不可见超时5>nul

其他回答

有!

SLEEP <seconds>

如果您希望它处于毫秒模式:

SLEEP -m <time in milliseconds>

这比超时更有用,因为可以通过单击键或CTRL+C(对于超时/t<secs>/nobreak)中止超时。SLEEP不能被任何东西中止(关闭按钮除外:p)

另一个是PING。但PING需要互联网连接,因为您将记录站点的连接。

我试图在msbuild任务中执行此操作,但由于I/O重定向,选择和超时都不起作用。

我最终使用了sleep.exehttp://sourceforge.net/projects/unxutils,这很好,因为它不需要任何安装,而且很小。


尝试选择:

<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.

尝试超时:

<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”/>,因为我正在并行执行dbghostexe多次,它基于当前的时间(以秒为单位)创建临时文件/数据库-这当然意味着如果启动多个实例,每个实例都使用相同的临时名称。我最初尝试使用MSBuild Extension Pack Thread.Sleep命令,但它似乎(通常)运行Sleep任务很好,但随后在所有线程中同时启动<exec>任务,当然dbghost.exe会因冲突而失败。到目前为止,使用sleep.exe似乎更可靠。

我认为以下命令可以帮助您:

pause 5

pause命令的语法为:pause d\\其中d表示持续时间(秒)

我使用的是Windows 7(32位),但我不知道其他的。

如果系统上有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毫秒)。

一种黑客是(错误地)使用ping命令:

ping 127.0.0.1 -n 6 > nul

说明:

ping是一个发送ping请求的系统实用程序。ping在所有版本的Windows上都可用。127.0.0.1是本地主机的IP地址。此IP地址保证始终解析、可访问并立即响应ping。-n 6指定将有6个ping。每个ping之间有一个1s的延迟,因此对于5s的延迟,您需要发送6个ping。>nul通过将ping重定向到nul来抑制ping的输出。