2017-09-12 19 views
1

我目前很难弄清楚如何获取活动接口名称作为变量输出,以后可以在代码中使用。 我一直在阅读here一点,如何使用cmd输出作为变量,但我需要具体的名称是活动的。CMD/Batch获取活动接口名称作为变量

我当前的代码:

@echo off 

    netsh interface show interface 


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

它显示此图像: enter image description here 我们可以看到,由于

netsh接口显示接口

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

+2

'FOR/F “跳过= 2个令牌= 3,*” %% A IN( 'netsh接口显示接口')DO回波%% B' – Stephan

+0

阅读了'for'命令的文档 - '为/ ?|更多',或者查看数以千计的如何使用'for'的示例。 – Magoo

+0

@Stephan,这非常有用,但是现在显示了他们所有的4个,我只需要活动的。 – Tanckom

回答

1

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

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行结尾

+0

谢谢,也是对语言依赖的负责人 – Tanckom

0

由于WMIC的输出具有'难看'<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%]=%*" 
+0

这给了我一个“环境变量VAR [未定义的输出...? – Tanckom

+0

错字。使用'NIC'替换'VAR [''' – Stephan

+0

编辑它,对不起。 – Compo