command-line 命令提示符cd - 如何在Windows的命令提示符下睡5秒钟? (或DOS)




命令提示字元指令 windows命令窗口 (25)

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

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

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

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

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

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


Answers

我们不能waitfor /T 180吗?

waitfor /T 180 pause将导致“错误:超时等待'暂停'。”

waitfor /T 180 pause >nul将在地毯下扫描该“错误”

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

在过去,我已经下载了一个名为sleep的可执行文件,在将它放入路径后,它将在命令行上起作用。

例如: sleep shutdown -r -f /m \\yourmachine尽管shutdown现在已经内置了-t选项


PING -n 60 127.0.0.1>nul

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


Timeout /t 1 >nul

就像在1秒钟内停顿一样,你可以拍摄近10万(99.999)秒。 如果你连接到互联网,最好的解决方案是:

ping 1.1.1.1. -n 1 -w 1000 >nul

当你ping的时候,你的计数以毫秒为单位,所以一秒就是1000毫秒。 但是ping命令有点不妥,它在离线机器上的工作方式不同。 问题是机器因为脱机而变得困惑,并且想要ping一个website/server/host/ip ,但它不能。 所以我会建议暂停。 祝你好运!


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

ping 127.0.0.1 -n 6 > nul

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


对用户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

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

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


rem *** HACK ALERT: Sleep for 5 seconds ***
ping -n 6 127.0.0.1 > nul
rem ***************************************
  • 如@Joey所解释的那样修复

通过使用“ping”,-n将仅在没有响应ping时才确定超时。 看看这篇关于DELAY作为批处理文件实现的文章。

DELAY命令作为批处理文件实现

我可以复制粘贴重要的部分,但整个帖子非常有用。


我很惊讶没有人提到过:

C:\> timeout 5

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

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

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

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

有!

SLEEP <seconds>

如果你想要它在毫秒模式:

SLEEP -m <time in milliseconds>

这比TIMEOUT更有用,因为TIMEOUT可以通过点击一个键或CTRL + CTIMEOUT /t <secs> /nobreak )来中止。 SLEEP不能被任何事情中止(除了关闭按钮:p)

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


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

sleep /w2000

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


你可以用timeout

这将是可见的: timeout 5

这将不会显示timeout 5 >nul



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

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

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

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


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

与w32tm

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

与typeperf:

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

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

pause 5

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

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


两个答案:

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

timeout /t <TimeoutInSeconds> [/nobreak] 

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

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


如果你的系统上有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比你的睡眠时间开始花费更少的时间,这种方法就可以工作(我的机器上大约需要600ms)。


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


尝试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."

我完全基于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

您也可以在计算中插入一天,以便在延迟时间间隔经过午夜时方法也适用。


我正在尝试从msbuild任务中完成此任务,并且由于I / O重定向,选择和超时都无法工作。

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

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


这也可能是有用的知道,你可以设置一个值,如果有人提供输入,用该值覆盖默认值..

myscript.sh -f ./serverlist.txt或者只是./myscript.sh(并且它需要默认值)

    #!/bin/bash
    # --- set the value, if there is inputs, override the defaults.

    HOME_FOLDER="${HOME}/owned_id_checker"
    SERVER_FILE_LIST="${HOME_FOLDER}/server_list.txt"

    while [[ $# > 1 ]]
    do
    key="$1"
    shift

    case $key in
        -i|--inputlist)
        SERVER_FILE_LIST="$1"
        shift
        ;;
    esac
    done


    echo "SERVER LIST   = ${SERVER_FILE_LIST}"




windows command-line batch-file sleep