Как я могу найти MAC-адрес определенного устройства с помощью пакетного файла Windows?

#macos #batch-file #mac-address

#macos #пакетный файл #mac-адрес

Вопрос:

Я пытаюсь написать скрипт, который будет сравнивать MAC-адрес локального подключения с MAC-адресом в лицензиях на программное обеспечение, чтобы увидеть, соответствует ли одна из лицензий машинам. Часть, которая меня заела прямо сейчас, извлекает MAC-адрес определенного устройства «Подключение по локальной сети».

Я пытался использовать функции поиска, такие как:

 ipconfig /all | findstr^ /C:"Local Area Connection"^ /C:"Physical Address" > C:tempmacaddress.txt
for /f "tokens=1,2 delims=:" %%i in (C:tempmacaddress.txt) do @echo The MAC Address of %%i is %%j
pause
  

Мне действительно не нужно echo в приведенной выше попытке, но я использую его для отладки.

Но все же приведенное выше утверждение помещает текст в файл, подобный этому:

«Физический адрес. . . . . . . . . : 00-37-10- D1-98-2C

Подключение к локальной сети с помощью адаптера Ethernet:

Физический адрес. . . . . . . . . : 5D-26-0A-11-11-15 » (кавычки добавлены мной, чтобы показать начало и конец текстового файла)

Исходя из этого, я не уверен, как извлечь MAC-адрес, который появляется после подключения к локальной сети адаптера Ethernet, особенно когда они не находятся на одной линии.

Мне нужно сделать это с помощью пакетного файла в Windows XP Professional. Спасибо.

Ответ №1:

Этот старый скрипт должен работать.
Сначала выполняется поиск правильного адаптера, а затем он ожидает, пока не появится строка, содержащая строку «Physical». Функция :Normalize предназначена для удаления < Возврат каретки> из выходных данных ipconfig в системах XP, поскольку Microsoft не знает точно, что строка должна заканчиваться на CR / LF, а не на LF / CR.

 @echo off
SETLOCAL EnableDelayedExpansion EnableExtensions

rem call :GetIP ip_WLAN "Drahtlos"
rem echo ---
set OS_Version=XP
call :GetIP result  "Ethernet adapter" "Physical"

echo mac=%result%

goto :eof

::::::::::::::::::::::::::::
:GetIP <resultVar> <AdapterName>
:: resultVar    return variable for the searched value
:: AdapterName  part of the adapter name
setlocal
set /a found=0
if "%OS_Version%"=="Win7" set ipText=IPv4
if "%OS_Version%"=="Vista" set ipText=IPv4
if "%OS_Version%"=="XP" set ipText=IP-
if "%~3"=="" (
    set searchText=!ipText!
) ELSE (
    set "searchText=%~3"
)
for /F "tokens=1,* delims=:" %%a IN ('ipconfig /all') DO (  
  call :Normalize first "%%a.dummy"
  call :Normalize post "%%b.dummy"

  if "!post!"=="_" (
    if "!first:%~2=!" NEQ "!first!" (
        set /a found=1
        rem echo adapter found "!first!"
    ) ELSE (
        if "!first!" NEQ "_" (
            set /a found=0
            rem echo - !first! !post!
        )
    )
  )

  if !found! EQU 1 (
    rem echo try "!first!"
    if "!first:%searchText%=!" NEQ "!first!" (
        set ipAddr=!post:_=!
        set ipAddr=!ipAddr: =!
        rem echo IP found !post! for adapter
    )
  )
)

(
  endlocal
  set %~1=%ipAddr%
  goto :eof
)

:Normalize
set %~1=_%~n2
goto :eof
  

Комментарии:

1. Спасибо, @jeb! Мне пришлось изменить индикаторы комментариев с «rem» на «REM! #». В остальном, похоже, что это работает отлично! Большое вам спасибо! Я потратил несколько дней на это самостоятельно, но без особого успеха. Еще раз спасибо!