已知 getmac /fo list /v 这个命令可以获取到的网络连接列表如下:
连接名: 蓝牙网络连接
网络适配器: Bluetooth 设备(个人区域网)
物理地址: 11-22-33-44-55-66
传输名称: 媒体已断开连接
连接名: 本地连接
网络适配器: Realtek PCIe GBE Family Controller
物理地址: 22-33-44-55-66-77
传输名称: \Device\Tcpip_{661AA191-BB37-4C30-8DD4-828E96F0GGGG}
连接名: 无线网络连接
网络适配器: Intel(R) Centrino(R) Wireless-N 2230
物理地址: 33-44-55-66-77-88
传输名称: 媒体已断开连接
连接名: 虚拟网络连接
网络适配器: Microsoft Virtual WiFi Miniport Adapter
物理地址: 44-55-66-77-88-99
传输名称: 媒体已断开连接
连接名: SSL连接
网络适配器: Sangfor SSL VPN CS Support System VNIC
物理地址: 55-66-77-88-99-00
传输名称: 媒体已断开连接
现在需要排除掉网络适配器名称里面包含关键字“Bluetooth”或“Virtual”或“VPN”的网络连接,而且只保留连接名称和网络适配器名称无法找到网络配适器的驱动程序,希望得到的格式如下:
连接名: 本地连接
网络适配器: Realtek PCIe GBE Family Controller
连接名: 无线网络连接
网络适配器: Intel(R) Centrino(R) Wireless-N 2230
思路1.bat
首先获取到符合条件的网络适配器所在行号,然后用这个行号减去2,这样就知道了for命令里面skip多少行就能找到对应的连接名。
@echo off
setlocal enabledelayedexpansion
set "FileTmp=%temp%\NetList.txt"
>"%FileTmp%" echo,
>>"%FileTmp%" getmac /fo list /v
for /f "tokens=1* delims=:" %%i in ('type "%FileTmp%" ^| findstr /n /i "网络适配器:"') do (
set "ThisLine=%%j"
echo,%%j | findstr /v /c:"Bluetooth" /c:"Virtual" /c:"VPN" >nul 2>&1
if !errorlevel! equ 0 (
set /a n=%%i-2
call :GetPreLine !n!
echo,%%j
)
)
pause
goto :eof
:GetPreLine
for /f "skip=%1 delims=" %%i in ('type "%FileTmp%"') do (
echo,%%i
goto :eof
)
goto :eof
思路2.bat
用一个变量PreviousLine保存含有“网络适配器”这个关键字所在行(不管是不是我们最终需要的网络适配器)的上一行内容,暂时不输出。一直等到找到了我们需要的网络适配器的时候,才把它(我们需要的连接名)和网络适配器一起输出。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('getmac /fo list /v') do (
set "ThisLine=%%i"
if "!ThisLine:网络适配器:=!" neq "!%%i!" (
set "PreviousLine=%%i"
) else (
echo,%%i | findstr /v /c:"Bluetooth" /c:"Virtual" /c:"VPN" >nul 2>&1
if !errorlevel! equ 0 (
echo,!PreviousLine!
echo,%%i
)
)
)
pause
请注意,本文中的代码主要是为了演示BAT脚本处理文本内容时常见的两个思路。如果单纯是为了获取到符合要求的网络连接名称和网络适配器名称,把getmac命令换成别的命令也许更加简单,此处不再详细展开。
【如果觉得有用无法找到网络配适器的驱动程序,请点击"喜欢作者"】
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论