如何让 Windows 批处理脚本等待几秒钟?
sleep和 wait似乎不起作用(无法识别的命令)。
sleep
wait
你可以试试
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压缩输出。
choice
/d y
/t 1
> NUL
Windows2003资源工具包有一个 sleep批处理文件。如果你想升级到 PowerShell,你可以使用:
Start-Sleep -s <time to sleep>
或者类似的东西。
timeout /t 10 /nobreak > NUL
/t指定以秒为单位的等待时间
/t
如果您按下一个键(CTRL-C 除外) ,/nobreak不会中断超时
/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 SET和 HELP CALL信息。
HELP SET
HELP CALL
我依赖于 JScript,我有一个这样的 JScript 文件:
// This is sleep.js WScript.Sleep( WScript.Arguments( 0 ) );
在批处理文件中,我用 犯罪现场记录运行它(通常是 %SystemRoot%\system32\cscript.exe)
%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