这是我们许多人在 Windows 上设置路线的方式:
路由添加 10.10.0.0 掩码 255.255.0.0 10.77.77.1 如果58-p
在命令行中58是接口索引 (IF),大多数情况下,其值对于特定网络接口卡是恒定的。因此,可以创建一个 CMD 批处理文件来自动删除和重新设置所需的所有路由。
但是,我有一个 USB 3.0 转双端口千兆以太网适配器 NIC,每次我连接到笔记本电脑的 USB 端口时,它的 IF 都会发生变化。我的做法是,打开一个命令shell,通过提供获取当前接口 ID路线打印,然后使用文本编辑器打开 CMD 批处理文件并将所有旧的 IF(例如:58) 值,保存并关闭,最后在 shell 上运行 CMD 批处理文件。
如果有一种方法可以仅通过了解 MAC 地址来设置路由,而不依赖于 IF - 那么问题就解决了:) 解决方案可能是一个简单的一行 CMD 命令(通过MAC设置路由),或者先通过 MAC 获取 IF,再通过 IF 设置路由(通过MAC地址接口设置路由)。
非常感谢您的帮助!
答案1
下一个代码片段展示了如何通过 MAC 获取 IF使用FOR /F
环形反对的结果WMIC(Windows 管理规范命令):
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_maca=AA:AA:AA:AA:AA:AA" change to match your circumstances
set "_geta=InterfaceIndex^, MACAddress" to keep next lines in reasonable length
set "_ifin=" to ensure that `_ifin` variable is empty
for /F "tokens=1,*" %%G in ('
WMIC NIC where "MACAddress='%_maca%'" get %_geta% 2^>NUL ^| find ":"
') do set "_ifin=%%~G"
if defined _ifin (
rem route command block here:
route add 10.10.0.0 mask 255.255.0.0 10.77.77.1 if %_ifin% -p
) else (
echo %_maca%: No Instance^(s^) Available.
)
资源(必读):
- (命令参考)Windows CMD 命令行的 AZ 索引
- (其他细节)Windows CMD Shell 命令行语法
- (
%~G
等专题页面)命令行参数(参数) - (
2>NUL
等专题页面)重定向 - (
"Double Quotes"
、^
插入符号等)转义符、分隔符和引号