使用WMIC仅查找以太网MAC地址

时间:2018-12-26 07:32:02

标签: batch-file ethernet mac-address wmic

我正在使用Win32_NetworkAdapter仅查找以太网MAC地址,但由于某种原因,它还在我的笔记本电脑/个人电脑中将我的WIFI报告为802.3

您能告诉我应该怎么做才能找到仅以太网mac地址。 我想使用批处理文件找到多个以太网mac地址

@echo off
setlocal EnableDelayedExpansion
setx /M PATH "%%PATH%%;C:\Windows\System32\wbem"
wmic path Win32_NetworkAdapter where "PNPDeviceID like '%%PCI%%' AND NetConnectionStatus=2 AND AdapterTypeID='0'" get name, MacAddress,AdapterType
pause

2 个答案:

答案 0 :(得分:0)

一种仅提取MAC地址的简单方法将使用FOR循环。

@ECHO OFF

Rem | Get only the MAC Address
for /f "tokens=3 skip=1" %%a in ('wmic path Win32_NetworkAdapter where "PNPDeviceID like '%%%%PCI%%%%' AND NetConnectionStatus=2 AND AdapterTypeID='0'" get name^,MacAddress^,AdapterType') do (Set "MacAddress=%%a")

Echo %MacAddress%

编辑:

由于您的原始脚本似乎仅输出一个MAC地址。由于您需要所有Ethernet个相关的MAC地址,因此我们可以使用IPCONFIG /ALL获取返回的Physical Address或MAC地址。

由于只需要从混乱IPCOFIG中提取某些数据,我们将需要在代码块中有一些额外的FOR循环来提取数据。

以下脚本将查找名称为“ Ethernet”的所有适配器,然后继续将Physical Address设置为字符串。我将REM放在脚本中,进一步解释了代码的每个步骤在做什么。如果您有任何问题,请留在下面。

查找Ethernet.bat的MAC地址:

@echo off
setlocal enabledelayedexpansion

Rem | Expand ipconfig To Loop
for /f "tokens=*" %%A in ('ipconfig /all') do (

    Rem | Only Find The Adapter Names With "Ethernet"
    for /f "tokens=*" %%B in ('Echo %%A^| find /V "."^| find /V "::"^| find /I ":"^| find /I "Ethernet"') do (

        Rem | Remove ":" From Output
        set "adapter=%%B"
        set adapter=!adapter::=%!

        Rem | Find the first "adapter" In ipconfig
        set adapterfound=false
        for /f "tokens=1-2 delims=:" %%f in ('ipconfig /all') do (
            set "item=%%f"
            if /i "!item!"=="!adapter!" (
                set adapterfound=true
            ) else if not "!item!"=="!item:Physical Address=!" if "!adapterfound!"=="true" (

                Rem | It Was Found, Extract Physical Address Data
                set "adress=%%g"
                set adress=!adress:* =%!
                set adapterfound=false
            )
        )

        Rem | Echo Each Result
        echo !adapter!: !adress!

    )
)

pause
GOTO :EOF

要获取有关任何命令的帮助,请执行以下操作:

  • call /?
  • set /?
  • for /?
  • if /?
  • find /?
  • 等等。

答案 1 :(得分:0)

我建议使用以下代码。

我不知道它的准确性如何,(未经测试),但是我敢肯定,与其他“批处理”产品相比,它识别蓝牙,MiniPort或WiFi适配器的可能性较小我见过的基于方法的方法。

@Echo Off
Set "MACs="
For /F "Skip=1 Delims=" %%A In ('
    "WMIC /NameSpace:\\root\WMI Path MSNdis_PhysicalMediumType Where (NdisPhysicalMediumType='0' Or NdisPhysicalMediumType='14') Get InstanceName 2>Nul"
') Do For /F "Tokens=*" %%B In ("%%A") Do Call :Sub %%B
If Defined MACs Echo %MACs::=%|Clip
Exit /B

:Sub
For /F "Skip=1" %%C In ('
    "WMIC Path Win32_NetworkAdapter Where (AdapterTypeID='0' And Name='%*' And NetConnectionStatus='2' And PhysicalAdapter='True') Get MACAddress 2>Nul"
') Do For /F "Tokens=*" %%D In ("%%C") Do If Not Defined MACs (
    Set "MACs=%%D") Else Call Set "MACs=%%MACs%% %%D"

我已经按照您的问题在NetConnectionStatus的{​​{1}}中进行了过滤。如果不太可能同时连接多个以太网适配器,则应从2行中删除And NetConnectionStatus='2'

注意:网络适配器名称中包含有害字符,可能会导致此代码失败。