【发布时间】:2011-05-18 01:13:30
【问题描述】:
如何让 Windows 批处理脚本等待几秒钟?
sleep 和 wait 似乎不起作用(无法识别的命令)。
【问题讨论】:
标签: windows shell batch-file scripting
如何让 Windows 批处理脚本等待几秒钟?
sleep 和 wait 似乎不起作用(无法识别的命令)。
【问题讨论】:
标签: windows shell batch-file scripting
你可以试试
ping -n XXX 127.0.0.1 >nul
其中 XXX 是等待的秒数加一。
【讨论】:
-n用来表示请求的数量。 ping 默认为每个回复等待一秒钟,即使它在更短的时间内到达。
hardware error 消息,并且在预期时间的一小部分内完成了所谓的 1 秒长的 ping。
我不知道为什么这些命令对你不起作用,但你也可以试试timeout
timeout <delay in seconds>
【讨论】:
timeout 效果很好,谢谢!
timeout /t 10 /nobreak > NUL
/t指定等待的时间,以秒为单位
/nobreak 不会在你按下某个键时中断超时(CTRL-C 除外)
> NUL 将抑制命令的输出
【讨论】:
/t 等待时间,以秒为单位,/nobreak 不会在按下按钮时中断超时(CTRL-C 除外),> NUL 将抑制命令的输出
等待 10 秒:
choice /T 10 /C X /D X /N
【讨论】:
> NUL 来抑制所有输出。
Choice 可用于 Windows XP,但默认情况下未安装。不过,它并未在 Windows 2003 中引入,因为它存在于 Windows 的 earlier consumer versions (95, 98) 甚至 MSDOS 6.0 中。当他们将消费者版本与从 Windows 2000 开始的 NT 版本结合起来时,他们可能只是忘记了这一点。;-)
微软有一个可以直接调用的睡眠函数。
Usage: sleep time-to-sleep-in-seconds
sleep [-m] time-to-sleep-in-milliseconds
sleep [-c] commited-memory ratio (1%-100%)
您可以只说 sleep 1,例如在批处理脚本中休眠 1 秒。
IMO Ping 是这个用例的一个小技巧。
【讨论】:
对于纯 cmd.exe 脚本,您可以使用这段以百秒为单位返回当前时间的代码。
: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
然后您可以在这样的等待循环中使用它。
:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof
然后将所有部分放在一起:
@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
有关此处使用的命令的更详细说明,请查看HELP SET 和HELP CALL 信息。
【讨论】:
:wait 标签之后插入 timeout x >nul(将 x 替换为等待的秒数)
嘿,Windows 嗯……很有趣。这有效:
choice /T 1 /d y > NUL
choice 会提示您是或否。 /d y 让它选择是。 /t 1 让它在输入之前等待一秒钟。 > NUL 压缩输出。
【讨论】:
Windows 2003 Resource Kit 有一个sleep 批处理文件。如果你升级到PowerShell,你可以使用:
Start-Sleep -s <time to sleep>
或者类似的东西。
【讨论】:
powershell -command "Start-Sleep -Milliseconds 5000">nul
我刚刚写了我自己的 sleep 叫 Win32 Sleep API function。
【讨论】:
RJLsoftware 有一个名为DelayExec.exe 的小实用程序。有了它,您可以批量执行任何程序的延迟启动和 Windows 注册表(在 ...Windows/.../Run 注册表中最有用)。
使用示例:
delayexec "C:\WINDOWS\system32\notepad.exe" 10
或作为睡眠命令:
delayexec "nothing" 10
【讨论】:
我个人使用Perl one-liner:
perl -e "sleep 10;"
等待 10 秒。作为 git 安装的一部分,您可能已经在开发机器上安装了 Perl;如果不是,您将不得不安装它,例如,从 ActiveState 或 Strawberry,但它是我安装的其中之一。
或者,您可以从GnuWin32 安装睡眠命令。
【讨论】:
ruby -e "sleep 10" -- 并且少了一个字符 :)
perl -e "sleep 9" :-)
node -e "setTimeout(a=>{}, 500)"