Windows批处理:睡觉

Cla*_*diu 119 windows shell scripting batch-file

如何让Windows批处理脚本等待几秒钟?

sleepwait似乎不工作(不能识别的命令).

ten*_*our 174

你可以试试

ping -n XXX 127.0.0.1 >nul
Run Code Online (Sandbox Code Playgroud)

其中XXX是等待的秒数加一.

  • 不错的小黑客 (3认同)
  • [Clay Calvert](http://groups.google.com/group/alt.msdos.batch.nt/msg/804a9fa0f5864558?pli=1)提供了此技术的说明.请注意,`-n`用于指示请求的数量.对于每个回复,`ping`默认等待一秒,即使它在更短的时间内到达. (3认同)
  • 哈哈,这么简单又如此天才:-)正是我所寻找的.+1 (2认同)

Jai*_*oto 156

我不知道为什么这些命令不适合你,但你也可以尝试超时

timeout <delay in seconds>
Run Code Online (Sandbox Code Playgroud)

  • [在Windows Vista中引入了TIMEOUT命令](http://en.wikipedia.org/wiki/Batch_file#Sleep_or_scripted_delay). (2认同)

luk*_*uku 148

timeout /t 10 /nobreak > NUL
Run Code Online (Sandbox Code Playgroud)

/t 指定等待的时间,以秒为单位

/nobreak 按键不会中断超时(CTRL-C除外)

> NUL 将抑制命令的输出

  • 哇靠!我不知道这是在那里.因此需要通过评级对这些答案进行排序.我几乎错过了这个. (8认同)
  • TIMEOUT命令在Windows XP上不起作用; [它是在Windows Vista中引入的.](http://en.wikipedia.org/wiki/Batch_file#Sleep_or_scripted_delay). (3认同)
  • 在我的XP机器上,我有它.@PeterMortensen它是否通过更新获得了? (3认同)
  • 这是我一直在寻找的,在任何地方都找不到.+1 (2认同)
  • @Heberda`/t`等待几秒钟的时间,如果你按一个按钮(`CTRL-C`除外),`/ nobreak`不会中断超时,`> NUL`将禁止输出命令 (2认同)

Gol*_*rol 13

要等10秒钟:

choice /T 10 /C X /D X /N
Run Code Online (Sandbox Code Playgroud)

  • CHOICE命令在Windows XP上不起作用; [它是在Windows 2003和Windows Vista中引入的.](http://ss64.com/nt/choice.html). (2认同)
  • @PeterMortensen原来`Choice`适用于Windows XP,但默认情况下不安装.但它并没有在Windows 2003中引入,因为它存在于Windows的早期消费者版本(http://www.computerhope.com/choicehl.htm)(95,98)中,甚至存在于MSDOS 6.0中.当他们将消费者版本与从Windows 2000开始的NT版本结合起来时,他们可能只是忘了它.;-) (2认同)

小智 13

Microsoft有一个可以直接调用的睡眠功能.

    Usage:  sleep      time-to-sleep-in-seconds
            sleep [-m] time-to-sleep-in-milliseconds
            sleep [-c] commited-memory ratio (1%-100%)
Run Code Online (Sandbox Code Playgroud)

你可以说睡眠1例如在你的批处理脚本中睡1秒钟.

对于这个用例,IMO Ping有点骇人听闻.

  • "C:\ Documents and Settings\User> sleep'leat'不被识别为内部或外部命令,可操作程序或批处理文件." 对于这个用例,Windows有点破解..大声笑 (9认同)
  • PowerShell还是普通的cmd.exe? (4认同)
  • 确认 - 它是POWER SHELL命令,而不是常规命令行(cmd.exe) (2认同)

PA.*_*PA. 6

对于纯cmd.exe脚本,您可以使用这段代码以hundreths秒为单位返回当前时间.

:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof
Run Code Online (Sandbox Code Playgroud)

然后,您可以在这样的等待循环中使用它.

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof
Run Code Online (Sandbox Code Playgroud)

将所有部分组合在一起:

@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof
Run Code Online (Sandbox Code Playgroud)

有关此处使用的命令的更详细说明,请检查HELP SETHELP CALL信息.

  • 但这是一个"忙碌的等待"循环,不必要地浪费CPU时间.在我看来,调用等待的命令更好.请在SO处考虑[此链接](http://stackoverflow.com/questions/1107593/what-are-trade-offs-for-busy-wait-vs-sleep)以了解更多信息.为了在脚本中缓解这种情况,您可以在`:wait`标签后插入`timeout x> nul`(将x替换为等待的秒数) (3认同)

Cla*_*diu 5

呵呵,Windows 呃……很有趣。这有效:

choice /T 1 /d y > NUL
Run Code Online (Sandbox Code Playgroud)

choice出现一个提示,询问您是或否。/d y让它选择是。/t 1让它在输入之前等待一秒钟。> NUL挤压输出。

  • 是的,但是您需要有一个询问“是”或“否”的 Windows。在我的荷兰语 Windows 上,它询问 Ja 或 Nee,因此 Y 不起作用。这就是为什么我在上面的答案中指定了确切的选择。您可以只添加 /N 来阻止显示提示。 (8认同)

Ale*_*son 5

我依赖JScript。我有一个像这样的 JScript 文件:

// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );
Run Code Online (Sandbox Code Playgroud)

在批处理文件中,我使用CScript运行它(通常是%SystemRoot%\system32\cscript.exe

rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000
Run Code Online (Sandbox Code Playgroud)