命令行常用命令 - 如何在Windows的命令提示符下睡5秒钟?(或DOS)




命令提示符cd (20)

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

这个问题在这里已经有了答案:

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

所以在Ruby中,我可以做类似的事情

sleep 3
system('c:/windows/system32/SnippingTool.exe')

但并非所有的计算机都有Ruby,那么我该怎么做.bat文件? (这是可以在大多数PC上使用剪切工具运行的东西)。

问题是在.bat文件中没有“睡眠”可用。


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

这个链接会帮助你更多


两个答案:

首先,为了延迟批处理文件,只是没有人们提出的所有钝化方法:

timeout /t <TimeoutInSeconds> [/nobreak] 

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

其次,值得一提的是,虽然它可能不是你想要的,但是使用内置的Windows剪辑工具,你可以在不使用鼠标的情况下触发剪辑。 运行剪切工具,退出当前剪辑,但保持工具运行,然后在想要剪切发生时按Control + Print Screen。 这不应该干扰你想要剪断的任何东西。


你可以用timeout

这将是可见的: timeout 5

这将不会显示timeout 5 >nul


在Windows xp sp3中,您可以使用睡眠命令


在较新的Windows操作系统版本上,您可以使用该命令

sleep /w2000

在DOS脚本( .cmd.bat )中等待2秒(2000毫秒 - 用你需要的毫秒数代替)。 注意包含/w参数 - 如果没有它,整个计算机都会进入睡眠状态! 如果您愿意,可以使用-m而不是/m ,并且可以在w和数字之间使用冒号(:)。



它可以用批处理文件中的两行简单行完成:在%temp%文件夹中写入一个临时.vbs文件并将其命名为:

echo WScript.Sleep(5000) >"%temp%\sleep.vbs"
cscript "%temp%\sleep.vbs"

尝试Choice命令。 从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."

您可以使用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

我做的。 它正在工作,并在数秒内显示时间。 如果您想使用它,请添加到批处理文件中:

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

我写了一个powerbasic程序wait.exe ,在那里你传递了一个毫秒参数给你的批处理文件

wait 3000
system('c:/windows/system32/SnippingTool.exe')

EXE的代码:

FUNCTION PBMAIN()
  c$ = Command$
  s! = Val(c$)*1000
  Sleep s!         
END FUNCTION

我很惊讶没有人提到过:

C:\> timeout 5

NB请注意但是(感谢丹!) timeout 5意味着:

在4到5秒之间的任何地方睡觉

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

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

我最简单的方法是这样的:

http://www.sleepcmd.com/下载Sleep.exe。 .exe文件应与您编写的程序位于同一文件夹中!


我看到的一个黑客是(错误)使用ping命令:

ping 127.0.0.1 -n 6 > nul

127.0.0.1是本地主机IP地址。
-n 6 - 每次ping之间有1秒的延迟,所以对于5秒的延迟,你需要做6个ping。
> nul - 抑制输出。


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

pause 5

暂停命令的语法是:pause d \\其中d代表以秒为单位的持续时间

我正在使用Windows 7(32位),但我不知道其他人。


还有两种方法可以应用于XP以上的所有应用程序:

与w32tm

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

与typeperf:

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

这是我在实践中使用的最新版本,当脚本结束时,可以暂停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

回声完成后,我可以看到脚本何时完成,并且ping提供了延迟。 额外的@符号意味着我看到“完成”文本,并且等待发生,而不会被他们的命令分散注意力。

我已经尝试过在XP机器上给出的各种解决方案,因为这个想法是有一个批处理文件可以在各种机器上运行,所以我选择XP机器作为可能性最小的环境。

GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul

这似乎预计会延迟三秒钟。 一次持续指定3秒的ping尝试。

BAD> ping -n 5 192.0.2.0 > nul

这花了大约10秒(而不是5)。 我的解释是,有5次尝试,每次大约相隔一秒,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这个地址可以防止这些测试垃圾邮件给任何人! 我相应地修改了上面的文字!


那么这个工程,如果你有选择或平。

@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并运行即可


PING -n 60 127.0.0.1>nul

万一您的LAN适配器不可用。





sleep