Нахождение только локального Mac-адреса с помощью wmic - PullRequest
0 голосов
/ 26 декабря 2018

Я использую Win32_NetworkAdapter для поиска только Mac-адресов Ethernet, но по какой-то причине он также сообщает мне WIFI как 802.3 в моем ноутбуке / ПК.

Можете ли вы сказать мне, что мне делать длянайти только Ethernet-адреса Mac.Я хочу найти несколько адресов ethernet 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 голосов
/ 31 декабря 2018

Я бы предложил метод, закодированный ниже.

Я не знаю, насколько он точен, (не проверен) , но я уверен, что он менее вероятенчтобы идентифицировать адаптеры Bluetooth, 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 из 2, как и в вашем вопросе.Если одновременное подключение более одного адаптера Ethernet маловероятно, необходимо удалить And NetConnectionStatus='2' из строки 11.

Примечание. Имена сетевых адаптеров, содержащие недопустимые символы, могут привести к тому, что этот кодпотерпеть неудачу.

0 голосов
/ 26 декабря 2018

Ну, простой способ извлечь только 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 внутри скрипта, чтобы объяснить, что делает каждый шаг кода.Если у вас есть какие-либо вопросы, оставьте их ниже.

Найдите MAC-адреса для Ethernet.bat:

@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 /?
  • и т. Д.
...