Windows のコマンドプロンプトでイーサネット MAC アドレスのみを取得する方法はありますか?

Windows のコマンドプロンプトでイーサネット MAC アドレスのみを取得する方法はありますか?

すべての NIC 物理アドレスを取得するには、ipconfig /allまたは を使用します。getmac /v

しかし、問題は、通常、コンピューターには複数の NIC カードが搭載されていることです。また、Microsoft 仮想 Wi-Fi ホットスポット NIC など、Wi-Fi ホットスポットがオンの場合にのみ表示される仮想 MAC アドレスもいくつかあります。

では、コマンドプロンプト経由でイーサネットに対応するアドレスのみを収集するにはどうすればよいでしょうか?

出力: ( getmac /fo csv /vWi-Fi ホットスポットを使用、オフ)

"Connection Name","Network Adapter","Physical Address","Transport Name" "Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}" "Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60", "Media disconnected"

出力: ( getmac /fo csv /vWi-Fiホットスポットをオンにして使用)

"Connection Name","Network Adapter","Physical Address","Transport Name" "Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}" "Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60", "Media disconnected" "Local Area Connection* 7","Microsoft Hosted Network Virtual Adapter","4A-E3-47- D2-FB-60","\Device\Tcpip_{630B2924-03A8-41C1-B1F2-D981A4C263C6}"

すべてのアダプタのリスト: (wmic nic) http://pastebin.com/zyz9LjJe

アップデート (考えられる解決策): @DavidPostill と @wmz の両方の回答が大変役に立ちました。最終的に、仮想 MAC アドレスを持つすべての仮想アダプターを削除する解決策を見つけました。 x2-xx-xx-xx-xx-xx x6-xx-xx-xx-xx-xx xA-xx-xx-xx-xx-xx xE-xx-xx-xx-xx-xx

これらの範囲の MAC アドレスは、仮想 MAC アダプタによって最もよく使用されます。 https://serverfault.com/questions/40712/仮想マシンで安全に使用できる MAC アドレスの範囲

したがって、コマンドですべての MAC アドレスを取得した後getmac、正規表現を使用してそれらの仮想 MAC アドレスをフィルターできます。さらに、「wi-fi」で MAC をフィルターする方が、「ローカル エリア接続」でフィルターするよりも信頼性が高いことがわかりました。そのため、名前に「wi-fi」が含まれる接続をフィルターして、最終的な LAN/イーサネット接続を取得します。

答え1

コマンドプロンプト経由でイーサネット MAC アドレスのみを取得する方法はありますか?

組み込みコマンドの 1 行 (ただし複雑) のシーケンスを使用して、必要な操作を実行できます。

コマンドラインから:

for /f "usebackq tokens=3 delims=," %a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%~a

バッチファイルから:

for /f "usebackq tokens=3 delims=," %%a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%%~a

どのように機能しますか?

以下を使用できます:

getmac /fo csv /v

すべてのローカル ネットワーク カードのメディア アクセス制御 (MAC) アドレスと、各アドレスに関連付けられているネットワーク プロトコルのリストを取得します。

オプションを使用して/v、詳細な出力(「接続名」を含む)を取得します。「接続名」は、後でどのアダプタが接続であるかを識別するために必要になりますEthernet

"Connection Name","Network Adapter","Physical Address","Transport Name"
"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"
"Wireless Network Connection","Atheros AR9285 Wireless Network Adapter","CC-AF-78-B2-4C-09","\Device\Tcpip_{B108BB0B-CCDC-4ACA-9DFE-5A2F17BC138D}"
"Bluetooth Network Connection","Bluetooth Device (Personal Area Network)","CC-AF-78-B2-4C-0A","Media disconnected"

|この出力をパイプすると、接続名が「ローカル エリア接続」である接続findのみの情報を取り出すことができます。Ethernet

getmac /fo csv /v ^| find "Local Area Connection"

次のように、「ローカル エリア接続」情報を csv (カンマ区切り) 形式で返します。

"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"

3 番目 (カンマ区切り) の値は MAC アドレスです。

ここで、forコマンドを使用して、上記の文字列から MAC アドレスのみを抽出します。

文字列は、(バッククォート)文字を次のようにfor使用してコマンドに渡されます。`usebackq

for /f "usebackq tokens=3 delims=," %a in (`string`) do

次のようにコンマで区切られた 3 番目のトークン (値) を返しますstring

"F0-BF-97-62-95-5D"

%~a文字列から引用符を削除するために使用され、次のようになります。

F0-BF-97-62-95-5D

最後に変数はMAC次のように設定されますF0-BF-97-62-95-5D:

set MAC=%~a

バッチ ファイル内のすべての%を に置き換える必要があることに注意してください%%


さらに読む

  • Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
  • 探す- ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
  • /fの場合- 別のコマンドの結果に対してコマンドをループします。
  • ゲットマック- ローカルまたはネットワーク全体の各コンピューターのすべてのネットワーク カードのメディア アクセス制御 (MAC) アドレスと、各アドレスに関連付けられているネットワーク プロトコルのリストを表示します。
  • パラメーター- コマンドライン引数 (またはパラメーター) は、バッチ スクリプトに渡される任意の値です。
  • セット- CMD 環境変数を表示、設定、または削除します。SET で行われた変更は、現在の CMD セッションの期間中のみ保持されます。

答え2

使用wmic

(イーサネット接続インターフェースのみ)

wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress

利用可能な物件の詳細情報: https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

編集: David が指摘したように、これにより WiFi アダプターも返されます (これは OP が望んでいることかもしれませんし、そうでないかもしれません)。LAN 以外のものをフィルターする簡単な方法 (接続名に基づく):

wmic nic where "NetConnectionId like '%Local Area%' and AdapterTypeId=0 AND netConnectionStatus=2" get MACAddress

答え3

Powershell では、次のように実行します (Windows 8 には、Windows 7 には付属していない Get-NetAdapter コマンドレットが搭載されています)。

(get-wmiobject win32_networkadapter -Filter "AdapterType LIKE 'Ethernet 802.3'") | select -expand macaddress
11:22:33:45:04:1E

答え4

ファイルにMACアドレスを書き込むためのもう少し簡単な解決策を見つけたようです

@FOR /F %%i IN ('getmac /fo table /nh') DO ECHO %%i >> D:\mac.txt

マシンの MAC アドレスを取得し、それをディスク D: にあるファイル mac.txt に書き込みます。

コードの説明: /Fキーを使用して、サイクル@FORにコマンド「getmac /fo table /nh」(''で指定)を渡し、コマンド実行の結果を変数iに割り当てることを指定します。次に、ECHOを使用して変数iの値をファイルに書き込みます。

getmac /fo table /nh

getmac /fo csvよりもシンプルな出力を得るには、getmac /fo table /nhの出力は次のようになります。

00-03-7F-50-5C-0D   \Device\Tcpip_{AD7B1C5C-5027-46A3-B693-95D01D7A0C6C}

したがって、この文字列を@FORサイクルに渡すだけで、デフォルトでは、この場合、最初のスペースの前にファイルを読み取り(特別なキーを定義する必要はありません)、読み取った値を変数iに割り当てます。次に、ECHOコマンドを使用してその値をファイルに書き込みます。

 DO ECHO %%i >> D:\mac.txt

>> はファイルに情報を追加しますが、 > はファイルを上書きすることに注意してください。

関連情報