【问题标题】:Batch loop not performing as expected批处理循环未按预期执行
【发布时间】:2013-04-04 14:21:10
【问题描述】:

我正在编写一个脚本来通过 IPMI 启动系统。在启动其他机器之前,必须可以访问其中一台机器。

我写了一个简单的循环,希望它能工作,但这给我带来了一些麻烦

:PING_LOOP
ping -n 1 -w 1000 <IP Address>
IF %ERRORLEVEL% NEQ 0 GOTO PING_LOOP

&lt;IP Address&gt; 是我在继续之前需要等待的机器的 IP 地址。该循环适用于 3 或 4 次迭代,但在此之后即使系统无法访问也会失败。这是有原因的吗?

编辑:此脚本正在 Win Server 2008 R2 机器上运行

【问题讨论】:

  • 刚刚在我的机器上尝试了一个无法访问的 ip (128.10.0.2),循环工作
  • 有趣。赢得服务器 2008 r2?
  • 在 windows 7 x64 和 2008 r2 x64 上试过
  • 让我感到困惑的是,它在给出错误读数之前会循环几次。在它失败后我立即手动 ping 它,它仍然得到一个 ERRORLEVEL 的 1
  • @Franklin 我已经在 XP 上尝试过(我所有可用的)并且它工作正常,无论是对于不存在的主机名和 IP 地址。您是否尝试过每次打印出%ERRORLEVEL% 以确定值是什么(可能服务器 暂时可用)?另外,您是否尝试按照Raymond Chen's suggestion 将测试编写为IF ERRORLEVEL 1?它不应该有所作为,但可能还有一些您尚未发布的其他代码,这意味着它会有所作为......

标签: loops batch-file goto


【解决方案1】:

好吧,想通了。

显然,当你 ping 某事并得到 Destination host unreachable 时,即使你没有得到 ping,它也会产生 ERRORLEVEL0,这对我来说没有意义。也许我只是不完全理解ping 的工作原理

不过,这是一个快速修复。我只是解析出TTL。这有点幼稚,但它适用于我的应用程序。

:PING_LOOP
ping -n 1 -w 1000 <IP Address> | find "TTL"
IF %ERRORLEVEL% NEQ 0 GOTO PING_LOOP

【讨论】:

  • 天真与否,my observations 与您的相同,到目前为止我还没有找到其他解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 2022-05-24
  • 2016-07-08
相关资源
最近更新 更多