如何运行命令直到成功?

Bur*_*ard 11 windows batch-file

我仍然使用Windows批处理文件来执行基本任务.其中一个是检查我的互联网连接(pg.bat),它只做一个ping www.google.com

大多数时候,我需要运行它几次,直到它成功(主机找不到错误).起初我认为一个ping -t会起作用,但事实并非如此.找不到主机时,它会立即停止.

如何在ping成功之前运行pg.bat?(即至少有一个默认的4个ping工作)

Rya*_*ose 12

通常,您可以在批处理文件中使用label/goto语法.

:repeat
your-command || goto :repeat
echo Success!
Run Code Online (Sandbox Code Playgroud)

||如果第一个命令失败,则只会运行第二个命令.在这种情况下失败意味着非零退出代码,因此它仅适用于设置%errorlevel%为0表示成功或非零表示失败的命令.

对于特定情况ping.exe,退出代码在失败时并不总是非零.在这种情况下,您可以使用find.exe搜索ping成功消息的输出并设置我们需要的错误级别.

:repeat
(ping -n 1 www.google.com | find "TTL=") || goto :repeat
echo Success!
Run Code Online (Sandbox Code Playgroud)

(感谢Stephan关于ping.exe退出代码的解释和解决方案)

  • `ping`的'%errorlevel%`不可靠("`来自<localhost>的回复:目标不可达`"给出'%errorlevel%`= 0).因此更好地使用`... |的错误级别 找到"TTL"` (3认同)

Ste*_*han 5

只需循环命令,直到成功:

:Loop
ping -n 1 www.google.com | find "TTL="
if not %errorlevel% equ 0 goto :Loop
echo Connection established
Run Code Online (Sandbox Code Playgroud)