CMD/Batch 获取活动接口名称作为变量

CMD/Batch get active interface name as variable

我目前很难弄清楚如何将活动接口名称作为变量输出,以便稍后在代码中使用。 我一直在阅读 here 一些内容,如何将 cmd 输出用作变量,但我需要有效的特定名称。

我当前的代码:

    @echo off

    netsh interface show interface


    FOR /F "tokens=* USEBACKQ" %%F IN (`netsh interface show interface`) DO (
    SET var=%%F
    )
    ECHO %var%
    Pause

其中显示此图像: 我们可以看到,由于

netsh interface show interface

,显示两个已连接的接口和两个未连接的接口。但是,我如何获得 f.ex。 以太网 2 和 WiFi 仅作为变量,如 %%V ?

获取所有已连接接口的名称:

FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Connected"') DO echo %%B

注意:这取决于语言。

对于独立于语言的解决方案,请使用 wmic(它有自己的陷阱和怪癖):

for /f "tokens=2 delims==" %%a in ('wmic nic where (NetConnectionStatus^=2^) get name /value') do (
  for /f "delims=" %%b in ("%%a") do echo %%b
)

内部for是为了处理难看的wmic行尾

因为 WMIC 的输出有 'ugly' <CR><CR><LF> 行结尾,而 NetConnectionID 的值通常会有不需要的尾随空格,我建议使用更像这样的东西来检索仅连接的网络适配器作为变量:

@Echo Off
Set "i=0"
For /F "Skip=1Delims=" %%A In (
 'WMIC NIC Where "NetConnectionStatus=2" Get NetConnectionID'
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%B
Set NIC[
Timeout -1
Exit/B
    :Sub
    Set/A i+=1
    Set "NIC[%i%]=%*"