#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! #». В остальном, похоже, что это работает отлично! Большое вам спасибо! Я потратил несколько дней на это самостоятельно, но без особого успеха. Еще раз спасибо!