Как я могу найти MAC-адрес определенного устройства через пакетный файл Windows? - PullRequest
0 голосов
/ 12 апреля 2011

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

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 12 апреля 2011

Этот старый скрипт должен работать.
Сначала он ищет правильный адаптер, а затем ожидает строку, содержащую строку «Физический». Функция: 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
...