最近遇到批处理获取网卡名称的需求,百度了很多没有特别合适的代码,学习了其他人的代码后自己综合了一下,分享出来。

讲下思路:
网卡名称中有些是“本地连接”、“Ethernet0”这种没有空格的,有些是“本地连接 1”这种带空格的。
先用ipconfig /all |find “以太网适配器”获取各网卡信息。

不带空格的情况,取tokens=2*,即从左往右第2列的内容即可。
带空格时,需要将tokens=2和tokens=3的内容一起取下来。

所以先对tokens=3*表示从左往右第3列的值进行判断——
如果该值为空,则说明网卡名称不带空格,直接取netsh interface show interface^|more中第4列的值(set name=%%a)存为name。
如果该值不为空,则说明网卡名称带空格,netsh interface show interface^|more中第4列的值带空格(set name=%%a %%b)存为name。

最后echo name的值。
————————————————————————————————————————————————————
代码分界线
————————————————————————————————————————————————————

for /f "tokens=3*" %%t in ('ipconfig ^/all ^| find "以太网适配器"') do set name3=%%t

if "%name3%"=="" (

for /f "tokens=4*" %%a in ('netsh interface show interface^|more') do (set name=%%a)

) else (

for /f "tokens=4*" %%a in ('netsh interface show interface^|more') do (set name=%%a %%b)
)
echo %name%
1
2
3
4
5
6
7
8
9
10
11
————————————————————————————————————————————————————
代码分界线
————————————————————————————————————————————————————
适用情况:只有一个网卡。
多个网卡的没遇到,估计不适用,遇到再处理。
还有如果你安装了VMware的话,像VMware Network Adapter Vmnet1这样的超长名称,本脚本也不适用。

验证结果:
只在win7和win10上做了验证。XP不知道是否适用。
win10如果提示命令行参数过多,需要对脚本每一条语句做验证,一般是多了个什么参数导致的,比如在show interface | more后面加了+2。这样的命令在win7上是ok的,win10上就会报错命令行参数过多。是我踩过的坑,也记录一下。
下面看结果。
不带空格的如下:

带空格的如下:

————————————————
版权声明:本文为CSDN博主「hzf202」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hzf202/article/details/102521009

发表评论

邮箱地址不会被公开。 必填项已用*标注