无法访问目标主机不会导致错误级别 1

Destination Host unreachable does not result in an errorlevel 1

所以在工作中,我们有一些计算机必须加载软件,通常当我通过以太网电缆将笔记本电脑连接到计算机时,我必须将我的 IPv4 地址设置为 10.10.1.99,因为计算机通常有 10.10.1.101 作为 IP 地址,然后我将软件加载到那台计算机上。 现在有时计算机有错误的 IP 预设,例如 10.41.246.7010.42.246.71

由于我们没有简单快速的方法来检查计算机的 IP 地址,我写了一个小脚本,将笔记本电脑的 IPv4 更改为计算机通常拥有的最常见 IP,并让它 ping 这些 IP : 代码看起来像这样,它检查了大约 8 个 IP:

cls
echo Searching.
netsh interface ip set address "Ethernet" static 10.10.1.99 255.255.255.0 >nul: 2>nul:
ping -w 4 -n 3 10.10.1.101
if !errorlevel!==0 (
    set activeip=10.10.1.101
    goto :ipfound
)

现在这段代码通常工作得很好,在 99% 的情况下它是我们知道的 8 个 IP 之一。 问题是,有时我得到的不是 "Request timed out",而是 "Destination Host unreachable",由于某种原因,这似乎不是错误,当我确实无法访问目标主机时,脚本认为它找到了正确的 IP。 现在有没有办法解决这个问题,例如通过添加某种:

if output == Destination Host Unreachable (goto next IP)

或者有没有办法告诉脚本无法访问目标主机也是一个错误。

感谢所有能以任何方式提供帮助的人。

因为Reply from xx.xx.xx.xx: Destination Host Unreachable在技术上仍然是一个回复..:)

您可以使用 findstr 来操纵您的 errorlevel

ping -w 4 -n 3 10.10.1.101 | findstr /i "TTL"
if "%errorlevel%"=="0" echo Success
if "%errorlevel%"=="0" echo Failed

请记住,此处的 errorlevel 是根据 findstr 的结果设置的(您的 findstr 字符串是否与您要求的匹配)。

为了演示,这将 return errorlevel of 0 因为满足了搜索字符串:

ping -w 4 -n 3 10.10.1.101 | findstr /i "Destination Host Unreachable"
echo %errorlevel%

最后,要修改您的脚本以始终检查实际的 reply from 而不是 destination host unreachable,并移动到下一个 IP 直到我们找到活动 IP,只需执行以下操作:

set "ips=10.10.1.101 10.10.1.102 10.10.1.103 10.10.1.104"
for %%i in (%ips%) do ( 
    ping -w 4 -n 3 %%i | findstr /i "TTL"

    if "!errorlevel!"=="0" (
        set "activeip=%%i"
        goto :ipfound
  )
)

您只需更改您想要的 IP 列表,我 set 我的 IP。

此外,我假设您已经在某处设置了 EnableDelayedExpansion,看到您正在使用它。