0

ローカルエリア接続のMACアドレスをソフトウェアライセンスのMACアドレスと比較して、ライセンスの1つがマシンと一致するかどうかを確認するスクリプトを作成しようとしています。私が今立ち往生している部分は、特定のデバイス「ローカルエリア接続」の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

イーサネットアダプタのローカルエリア接続:

実在住所。。。。。。。。。:5D-26-0A-11-11-15 "(テキストファイルの最初と最後を示すために私が追加した引用符)

そのことから、イーサネットアダプタのローカルエリア接続の後に来るMACアドレスをプルする方法がわかりません。特に、同じ回線上にない場合はそうです。

これは、WindowsXPProfessionalのバッチファイルで行う必要があります。ありがとうございました。

4

1 に答える 1

0

この古いスクリプトは機能するはずです。
最初に正しいアダプタを検索し、次に文字列「Physical」を含む行まで待機します。:Normalize 関数は、XP システムで ipconfig の出力から < Carriage Return>を削除するためのものです。Microsoft は、行が LF/CR ではなく CR/LF で終わる必要があることを正確に認識していないためです。

@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
于 2011-04-12T12:19:47.637 に答える