Windows 批处理: 睡眠

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

sleepwait似乎不起作用(无法识别的命令)。

217893 次浏览

你可以试试

ping -n XXX 127.0.0.1 >nul

其中 XXX 是等待的秒数,加上1。

我个人使用 Perl 俏皮话:

perl -e "sleep 10;"

等10秒钟。您可能已经在开发机器上安装了 Perl 作为 git 安装的一部分; 如果没有,那么您将不得不安装它,例如,从 激活状态草莓味的,但它是我安装的那些东西之一。

或者,您可以从 GnuWin32安装 sleep 命令。

我不知道为什么这些命令对您不起作用,但是您也可以尝试 暂停

timeout <delay in seconds>

等待10秒钟:

choice /T 10 /C X /D X /N

呵呵,Windows 是,嗯... ... 有趣的。这个工作原理:

choice /T 1 /d y > NUL

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

Windows2003资源工具包有一个 sleep批处理文件。如果你想升级到 PowerShell,你可以使用:

Start-Sleep -s <time to sleep>

或者类似的东西。

timeout /t 10 /nobreak > NUL

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

如果您按下一个键(CTRL-C 除外) ,/nobreak不会中断超时

> NUL将禁止该命令的输出

我刚刚写了我自己的睡眠称为 Win32 睡眠 API 函数

对于纯 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 SETHELP CALL信息。

我依赖于 JScript,我有一个这样的 JScript 文件:

// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );

在批处理文件中,我用 犯罪现场记录运行它(通常是 %SystemRoot%\system32\cscript.exe)

rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000

Microsoft 有一个可以直接调用的睡眠函数。

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

例如,您可以在批处理脚本中使用 睡眠1来睡眠1秒钟。

IMO Ping 对于这个用例来说有点像黑客。

RJLsoftware 有一个名为 DelayExec.exe的小实用程序。通过这种方式,您可以在批处理和 Windows 注册表中执行任何程序的延迟启动(在... Windows/.../Run 注册表中最有用)。

用法例子:

delayexec "C:\WINDOWS\system32\notepad.exe" 10

或作为睡眠指令:

delayexec "nothing" 10