【问题标题】:CMD/Batch get active interface name as variableCMD/Batch 获取活动接口名称作为变量
【发布时间】:2017-09-12 15:23:38
【问题描述】:

我目前很难弄清楚如何将活动接口名称作为变量输出获取,以便以后在代码中使用。 我一直在阅读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 界面显示界面

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

【问题讨论】:

  • FOR /F "skip=2 tokens=3,*" %%A IN ('netsh interface show interface') DO echo %%B
  • 阅读for 命令的文档 - 从提示符处查看for /?|more,或查看SO 以了解如何使用for 的数千个示例。
  • @Stephan,这非常有用,但现在显示所有 4 个,我只需要活动的。
  • 所以Ethernet 2 已连接?在屏幕截图中,它看起来很像Disconnected...如果您想要准确的答案,请准确。
  • @Stephan,没有。这个例子的结果是我需要将 WiFi 和 Virtual Box 作为变量。

标签: batch-file variables cmd connection


【解决方案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行尾

【讨论】:

  • 谢谢,也感谢语言依赖
【解决方案2】:

因为 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%]=%*"

【讨论】:

  • 这给了我一个“环境变量 VAR[未定义”输出...?
  • 错字。将VAR[ 替换为NIC[
  • @Tanckom;对于我上面提供的内容,请考虑修改您对当前答案的接受;谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多