当前位置:  开发笔记 > 编程语言 > 正文

如何在批处理文件/ cmd中睡5秒?

如何解决《如何在批处理文件/cmd中睡5秒?》经验,为你挑选了14个好方法。

Windows的截图工具可以捕获屏幕,但有时我想在5秒后捕获屏幕,例如拍摄网络摄像头显示的图像.(例如,运行脚本并对相机微笑).

我的问题是:如何在批处理文件中睡5秒?



1> asveikau..:

没有人提到我,我感到非常惊讶:

C:\> timeout 5

NB请注意(感谢Dan!)这timeout 5意味着:

睡眠时间在4到5秒之间

这可以通过将以下内容放入批处理文件,重复运行并计算第一个和第二个echos 之间的时间差来凭经验验证:

@echo off
echo %time%
timeout 5 > NUL
echo %time%


它适用于Win 7,但不适用于Win XP
`timeout`在非交互式脚本中不起作用:"错误:不支持输入重定向,立即退出进程."
超时执行不力.如果你执行"超时1",它将等到"下一秒",这可能会在.1秒内发生.尝试做几次"超时1"并观察延迟的差异.持续5秒或更长时间,这可能不是什么大问题,但是延迟1秒,它的效果很差.
'timeout'不被识别为内部或外部命令,可操作程序或批处理文件.(在我的Windowx XP SP3上)
我相当肯定我已经在Server 2003上使用它(与XP相同的代码库),所以这不奇怪它不在XP上......
此外,您可能需要'/ nobreak'选项.否则,它会在收到按键事件后立即结束超时.
@Ian我认为如果它的设计方式不好或者记录不好.它在`timeout /?中特别指出它将"等待指定的时间段(以秒为单位)".0.1秒是与1.0的巨大差异,这是我身边的一个主要刺,并不是我可以依赖的短暂(ish)超时
因为XP不是Server 2k3.哎呀,它已经两年了,历史上(不包括NT 4)服务器操作系统附带了一些工作站变种中没有的东西.
根据这个网站http://commandwindows.com/vista-tips.htm#timeout,Vista引入了超时
为我工作的魅力.
不能在JENKINS中工作:`错误:不支持输入重定向,立即退出进程
@Yar考虑将`START / WAIT TIMEOUT / T x / NOBREAK> NUL`用于非交互式脚本。

2> Martin..:

一个hack是(错误)使用ping命令:

ping 127.0.0.1 -n 6 > nul

说明:

ping是一个发送ping请求的系统实用程序.ping适用于所有版本的Windows.

127.0.0.1是localhost的IP地址.保证此IP地址始终可以解析,可以访问,并立即响应ping.

-n 6指定有6个ping.每次ping之间有1s延迟,因此对于5s延迟,您需要发送6次ping.

> nulping通过重定向来抑制输出nul.


它更干净,更可靠,IME,"ping 127.0.0.1 -n 10> nul" - 每次ping等待1秒,所以将次数改为你想要延迟的秒数.
一个更正 - 1.1.1.1是一个完全有效的_public_ IP地址.从理论上讲,可能会达成.它现在处于离线状态,因为我怀疑它们的主人放弃了将它用于来自世界各地的任何东西的希望:)有关此IP的更多详细信息,请参阅http://serverfault.com/a/339782.使用Cyber​​gibbons建议的127.0.0.1或网络中不存在的_private_地址之一(例如10.1.1.1等)是安全的.
@Cyber​​gibbons请注意fence-post错误.*每次ping之间有1s延迟*,因此对于10s延迟,你需要做11次ping,即"ping 127.0.0.1 -n 11> nul"
二,建议使用127.0.0.1(localhost),如果我有上网问题,则无法正常工作:/
这对我来说效果不好(可能是网络问题)?当我尝试上面的命令(没有管道到nul)时,我立即从网关服务器获得"目标主机无法访问",并且ping命令立即退出.

3> Adam Porad..:

尝试选择命令.它自MSDOS 6.0以来一直存在,应该可以解决问题.

使用/ T参数指定超时(以秒为单位)和/ D参数指定默认选择,然后忽略选择的选项.

可能存在问题的一件事是,如果用户在超时期限过去之前键入其中一个选择字符.部分解决方法是混淆情况 - 使用/ N参数隐藏有效选择列表,并且在选择集中只有1个字符,这样用户在输入之前输入有效选项的可能性就会降低.超时到期.

以下是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."


那很有意思.该站点http://www.computerhope.com/choicehl.htm表示该选项适用于Windows 95,Windows 98,Windows Vista和Windows 7,但不适用于Windows XP.我敢打赌,MS对于服用XP有很多抱怨,所以他们把它放回到Vista中.
它不是在XP上......

4> noctonura..:

以下黑客让你睡了5秒钟

ping -n 6 127.0.0.1 > nul

由于ping在ping之间等待一秒钟,因此您必须指定一个比您需要的更多的ping.


这应该是`-n 6`.否则你只需等待4秒钟.请记住,`ping`在*ping之间等待1秒*,所以你总是要指定一个比你需要的更多的尝试.
这是比ping一个假定的不存在的IP更好的解决方案,当网络关闭时,它会失败.ping localhost几乎总是有效.

5> Niall Connau..:

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


只需加载PowerShell需要几秒钟.
我自己最终使用了这个.运行普通的5秒睡眠大约需要5.5秒 - 在我的机器上完成5.6秒.使用我发布的第二个脚本将不准确性降低到大约20-30毫秒.如果你需要更高的准确度,我怀疑你也会从ping方法中得到它.
@NiallConnaughton你能用-NoProfile进行测试,看看它会影响速度吗?这样可以避免加载用户的配置文件,该配置文件应该阻止磁盘搜索和文件访问以及添加到用户配置文件的任何"插件/模块/等".

6> Alex..:

你可以用timeout:

这将是可见的: timeout 5

这将不可见 timeout 5 >nul



7> 小智..:

我们不能waitfor /T 180吗?

waitfor /T 180 pause 将导致"错误:超时等待'暂停'."

waitfor /T 180 pause >nul 将扫除地毯下的"错误"

waitfor在Win95之后,该命令应该在Windows操作系统中

在过去,我已经下载了一个名为的可执行文件sleep,它可以在您将其放入路径后在命令行上运行.

例如:sleep shutdown -r -f /m \\yourmachine 虽然shutdown现在内置了-t选项


您可以使用`2>`来吃错误`waitfor/T 5 pause 2> NUL`
`waitfor/T 10 pause`效果很好.

8> 小智..:

Timeout /t 1 >nul

就像在1秒内暂停一样,你可以将点击率提高到接近100.000(99.999)秒.如果您连接到互联网,最佳解决方案是:

ping 1.1.1.1. -n 1 -w 1000 >nul

当您ping时,以毫秒为单位计算,因此一秒钟将为1000毫秒.但ping命令有点不确定,它在离线机器上的工作方式不同.问题是机器因为离线而感到困惑,并且想要ping一个website/server/host/ip,但它不能.所以我建议超时.祝好运!


Ping到1.1.1.1不是一个好的,也不是最好的解决方案.它会导致网络流量.请改为ping到localhost.

9> Amir..:

SLEEP 5 包含在一些Windows资源工具包中.

TIMEOUT 5 一些Windows资源工具包中包含了它,但现在是Windows 7和8中的标准命令(不确定Vista).

PING 1.1.1.1 -n 1 -w 5000 >NUL 对于具有TCP/IP客户端的任何MS-DOS或Windows版本,PING可用于延迟执行数秒.

NETSH badcommand (仅限Windows XP/Server 2003)或 CHOICE

此链接将为您提供更多帮助.



10> Ned Martin..:

两个答案:

首先,要延迟批处理文件,简单地没有人们提出的所有钝方法:

timeout /t  [/nobreak] 

http://technet.microsoft.com/en-us/library/cc754891.aspx

其次,值得一提的是,虽然它可能无法完全满足您的需求,但使用内置的Windows剪切工具,您可以在不使用鼠标的情况下触发剪辑.运行剪切工具,从当前剪辑中退出但保持工具运行,并在需要剪辑时按"控制+打印"屏幕.这不应该干扰你想要剪断的东西.



11> gregmac..:

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

我最终使用了来自http://sourceforge.net/projects/unxutils的 sleep.exe ,这很不错,因为它不需要任何安装,而且很小.


尝试choice:


  

结果是:

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:


  

结果是:

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.

在旁边:

我实际上正在使用,因为我并行多次执行dbghost.exe并且它基于当前的纪元时间以秒为单位创建临时文件/数据库 - 这当然意味着如果你启动多个实例,每个实例都使用相同的临时名称.我原本试图使用MSBuild Extension Pack Thread.Sleep命令,但似乎(通常)它正在运行睡眠任务,但随后在所有线程中同时启动任务,当然dbghost.exe会因冲突而失败.到目前为止,使用sleep.exe似乎更可靠.


关于选择/超时在msbuild任务中不起作用的非常有用的说明.在那种情况下,我确实发现在msbuild中为我工作的接受的答案(ping):ping 1.1.1.1 -n 1 -w 3000> nul

12> Ivan..:

这是我在实践中使用的最新版本,在脚本完成时看到输出的十秒钟暂停.

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

回显完成允许我查看脚本何时完成并且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这个地址会阻止这些测试给任何人发送垃圾邮件!我相应地修改了上面的文字!



13> npocmaka..:

XP和更高版本上的所有东西都可以使用的两种其他方式:

与w32tm

w32tm /stripchart /computer:localhost /period:5 /dataonly /samples:2  1>nul 

使用typeperf:

typeperf "\System\Processor Queue Length" -si 5 -sc 1 >nul



14> 小智..:

我做的.它正在工作,并在几秒钟内显示时间.如果要使用它,请添加到批处理文件:

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

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有