我想确定工作站上的主要源 IP 是什么(当连接通过默认网关时使用)
工作站上有许多 IP/接口(许多私有子网、虚拟箱,脚本应该忽略)。
我找到了 %computername%,但它不可靠,因为它经常返回 virtualbox 网络的私有 IP。
我想在“路线打印”上找到它
for /f "tokens=4" %%a in ('route PRINT -4 ^| findstr 0.0.0.0') do set _IPaddr=%%a
echo IP is: %_IPaddr%
但是“findstr 0.0.0.0”还返回其他路线:
>route PRINT -4 | findstr /s /i /m 0.0.0.0
0.0.0.0 0.0.0.0 10.170.44.1 10.170.44.150 2
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.177.1 281
224.0.0.0 240.0.0.0 On-link 192.168.137.1 311
224.0.0.0 240.0.0.0 On-link 10.170.44.150 257
如何告诉 findstr 仅返回以空格开头然后是 0.0.0.0 的第一行?(默认路线)?
答案1
首先,你提出了一些多余的论点:
/s
用于搜索目录和子目录/i
不区分大小写,这在搜索数字时没有意义
这应该可以实现你想要的效果:
route PRINT -4 | findstr /c:" 0.0.0.0"
指示按字面/c
意思findstr
搜索后续字符串,即防止它剥离前导空格。
或者你也可以route
自己做更多的工作:
route PRINT 0.0.0.0 | findstr "0.0.0.0"