因此,在工作中,我们需要加载一些计算机,通常,当我通过以太网电缆将笔记本电脑连接到计算机时,我必须将IPv4地址设置为10.10.1.99
,因为计算机通常具有{ {1}}作为IP地址,然后将软件加载到该计算机上。
现在有时候计算机的IP预设值有误,例如10.10.1.101
或10.41.246.70
。
因为我们没有一种简便快捷的方法来检查计算机的IP,所以我写了一些脚本,将笔记本电脑的IPv4更改为计算机通常具有的最常见IP,并让其ping这些IP: 代码看起来像这样,它检查了大约8个IP:
10.42.246.71
现在此代码通常可以正常工作,在99%的情况下,它是我们所知道的8个IP之一。 问题是有时我会收到“目标主机不可达”而不是“请求超时”,由于某种原因,这似乎不是一个错误,并且当我确实无法达到目标主机时,脚本认为它找到了正确的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
)
或者有没有办法告诉脚本目标主机不可达也是错误。
感谢所有可以提供任何帮助的人。
答案 0 :(得分:0)
因为从技术上来说,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
字符串是否与您要求的字符串匹配)。
为了演示,这将返回errorlevel
中的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
)
)
您只需要在set
IP的位置更改所需的IP列表即可。
此外,假设您正在使用EnableDelayedExpansion
,我假设您已经在其中放置了它。