Windows批处理:睡眠[重复]
Posted
技术标签:
【中文标题】Windows批处理:睡眠[重复]【英文标题】:Windows batch: sleep [duplicate] 【发布时间】:2011-05-18 01:13:30 【问题描述】:如何让 Windows 批处理脚本等待几秒钟?
sleep
和 wait
似乎不起作用(无法识别的命令)。
【问题讨论】:
【参考方案1】:你可以试试
ping -n XXX 127.0.0.1 >nul
其中 XXX 是等待的秒数加一。
【讨论】:
Clay Calvert 提供了对这种技术的解释。注意-n
用来表示请求的数量。 ping
默认为每个回复等待一秒钟,即使它在更短的时间内到达。
请记住,您需要在秒数上加一,因为 ping 不会在第一个请求之前等待。
哈哈,如此简单却又如此天才 :-) 正是我想要的。 +1
我能找到的唯一能在普通 XP 上工作的东西。
当我需要一个脚本来自动释放计算机的 IP 地址时,我遇到了一个有趣的问题,我需要等待几分钟,然后重新配置交换机端口,然后更新 IP 地址。在交换机端口关闭期间,网络连接丢失并且 ping 出错并显示 hardware error
消息,并且在预期时间的一小部分内完成了所谓的 1 秒长的 ping。【参考方案2】:
我不知道为什么这些命令对你不起作用,但你也可以试试timeout
timeout <delay in seconds>
【讨论】:
我安装了普通的 Windows XP。我认为“睡眠”是您必须安装的附加功能。不过,timeout
效果很好,谢谢!
哦!我不知道超时。不幸的是,它在 Windows 2000 中不可用,尽管现在这可能不是问题。如果是,则选择也适用于以前的版本(即使在 DOS 中)。
我没用过这个命令——我只是在ss64找到的。您可能还想看看lukuluku's solution。
这适用于 Windows 7
The TIMEOUT command was introduced in Windows Vista.【参考方案3】:
timeout /t 10 /nobreak > NUL
/t
指定等待的时间,以秒为单位
/nobreak
不会在你按下某个键时中断超时(CTRL-C 除外)
> NUL
将抑制命令的输出
【讨论】:
天哪!我不知道这是在那里。 SO 需要按等级对这些答案进行排序。我差点错过了。 这是我一直在寻找的,但在任何地方都找不到。 +1 TIMEOUT 命令在 Windows XP 上不起作用; it was introduced in Windows Vista.. 在我的 XP 机器上我有它。 @PeterMortensen 它是通过更新进入的吗? @Heberda/t
等待时间,以秒为单位,/nobreak
不会在按下按钮时中断超时(CTRL-C
除外),> NUL
将抑制命令的输出【参考方案4】:
等待 10 秒:
choice /T 10 /C X /D X /N
【讨论】:
我将使用它和> NUL
来抑制所有输出。
哇,实际上我正在使用的这个 xp 安装既没有超时也没有选择......真的很奇怪。 ping 是。
CHOICE 命令在 Windows XP 上不起作用; it was introduced in Windows 2003 and Windows Vista..
@PeterMortensen 原来Choice
可用于 Windows XP,但默认情况下未安装。不过,它并未在 Windows 2003 中引入,因为它存在于 Windows 的 earlier consumer versions (95, 98) 甚至 MSDOS 6.0 中。当他们将消费者版本与从 Windows 2000 开始的 NT 版本结合起来时,他们可能只是忘记了这一点。;-)【参考方案5】:
微软有一个可以直接调用的睡眠函数。
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 是这个用例的一个小技巧。
【讨论】:
"C:\Documents and Settings\User>sleep 'sleep' 未被识别为内部或外部命令、可运行程序或批处理文件。"对于这个用例,Windows 有点小题大做。哈哈 我可以在我的机器上使用“睡眠”(Windows 7)。 PowerShell 还是普通的 cmd.exe? PowerShell 确实如此。不错的@RandomInsano! 确认 - 这是一个 POWER SHELL 命令,而不是常规命令行 (cmd.exe)【参考方案6】:对于纯 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
信息。
【讨论】:
但这是一个“忙等待”循环,会不必要地消耗 CPU 时间。在我看来,调用等待的命令更好。请在 SO 考虑this link 以了解更多信息。为了在脚本中缓解这种情况,您可以在:wait
标签之后插入 timeout x >nul
(将 x 替换为等待的秒数)【参考方案7】:
嘿,Windows 嗯……很有趣。这有效:
choice /T 1 /d y > NUL
choice
会提示您是或否。 /d y
让它选择是。 /t 1
让它在输入之前等待一秒钟。 > NUL
压缩输出。
【讨论】:
是的,但是您需要有一个询问是或否的 Windows。在我的荷兰语 Windows 上,它询问 Ja 或 Nee,因此 Y 不起作用。这就是为什么我在上面的答案中指定了确切的选择。您可以添加 /N 以防止显示提示。 @GolezTrol:仍然需要“> NUL”来禁止显示“X”。啊,我没有意识到“/C”的重要性,我在网上找到的例子有它 CHOICE 命令在 Windows XP 上不起作用; it was introduced in Windows 2003 and Windows Vista..【参考方案8】:Windows 2003 Resource Kit 有一个sleep
批处理文件。如果你升级到PowerShell,你可以使用:
Start-Sleep -s <time to sleep>
或者类似的东西。
【讨论】:
...或powershell -command "Start-Sleep -Milliseconds 5000">nul
【参考方案9】:
我依赖JScript。我有一个这样的 JScript 文件:
// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );
在批处理文件中,我使用CScript 运行它(通常是%SystemRoot%\system32\cscript.exe
)
rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000
【讨论】:
【参考方案10】:我刚刚写了我自己的 sleep 叫 Win32 Sleep API function。
【讨论】:
/* 用 ms vc6 编译,cl.exe Sleep.c,例如Sleep.exe 100 .. 睡眠 100 毫秒 */ #includeRJLsoftware 有一个名为DelayExec.exe 的小实用程序。有了它,您可以批量执行任何程序的延迟启动和 Windows 注册表(在 ...Windows/.../Run 注册表中最有用)。
使用示例:
delayexec "C:\WINDOWS\system32\notepad.exe" 10
或作为睡眠命令:
delayexec "nothing" 10
【讨论】:
【参考方案12】:我个人使用Perl one-liner:
perl -e "sleep 10;"
等待 10 秒。作为 git 安装的一部分,您可能已经在开发机器上安装了 Perl;如果不是,您将不得不安装它,例如,从 ActiveState 或 Strawberry,但它是我安装的其中之一。
或者,您可以从GnuWin32 安装睡眠命令。
【讨论】:
啊这不是我安装的东西之一 =P。我什至不想安装“sleep.exe”实用程序,所以这有点多。 Ruby 也可以:ruby -e "sleep 10"
-- 并且少了一个字符 :)
@Roy:实际上,perl 可以不用分号。如果你能在 9 秒而不是 10 秒内逃脱,甚至可以少两个字符:perl -e "sleep 9"
:-)
你也可以这样使用php:php -r sleep(5);
这是另一个解释器:node -e "setTimeout(a=>, 500)"
以上是关于Windows批处理:睡眠[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 Windows 批处理文件向控制台回显空白(空)行 [重复]
Windows 是不是进入睡眠模式或使用 C++ 休眠? [复制]