我正在使用Win32_NetworkAdapter
仅查找以太网MAC地址,但由于某种原因,它还在我的笔记本电脑/个人电脑中将我的WIFI报告为802.3
。
您能告诉我应该怎么做才能找到仅以太网mac地址。 我想使用批处理文件找到多个以太网mac地址
@echo off
setlocal EnableDelayedExpansion
setx /M PATH "%%PATH%%;C:\Windows\System32\wbem"
wmic path Win32_NetworkAdapter where "PNPDeviceID like '%%PCI%%' AND NetConnectionStatus=2 AND AdapterTypeID='0'" get name, MacAddress,AdapterType
pause
答案 0 :(得分:0)
一种仅提取MAC地址的简单方法将使用FOR
循环。
@ECHO OFF
Rem | Get only the MAC Address
for /f "tokens=3 skip=1" %%a in ('wmic path Win32_NetworkAdapter where "PNPDeviceID like '%%%%PCI%%%%' AND NetConnectionStatus=2 AND AdapterTypeID='0'" get name^,MacAddress^,AdapterType') do (Set "MacAddress=%%a")
Echo %MacAddress%
编辑:
由于您的原始脚本似乎仅输出一个MAC地址。由于您需要所有Ethernet
个相关的MAC地址,因此我们可以使用IPCONFIG /ALL
获取返回的Physical Address
或MAC地址。
由于只需要从混乱IPCOFIG
中提取某些数据,我们将需要在代码块中有一些额外的FOR循环来提取数据。
以下脚本将查找名称为“ Ethernet”的所有适配器,然后继续将Physical Address
设置为字符串。我将REM
放在脚本中,进一步解释了代码的每个步骤在做什么。如果您有任何问题,请留在下面。
查找Ethernet.bat的MAC地址:
@echo off
setlocal enabledelayedexpansion
Rem | Expand ipconfig To Loop
for /f "tokens=*" %%A in ('ipconfig /all') do (
Rem | Only Find The Adapter Names With "Ethernet"
for /f "tokens=*" %%B in ('Echo %%A^| find /V "."^| find /V "::"^| find /I ":"^| find /I "Ethernet"') do (
Rem | Remove ":" From Output
set "adapter=%%B"
set adapter=!adapter::=%!
Rem | Find the first "adapter" In ipconfig
set adapterfound=false
for /f "tokens=1-2 delims=:" %%f in ('ipconfig /all') do (
set "item=%%f"
if /i "!item!"=="!adapter!" (
set adapterfound=true
) else if not "!item!"=="!item:Physical Address=!" if "!adapterfound!"=="true" (
Rem | It Was Found, Extract Physical Address Data
set "adress=%%g"
set adress=!adress:* =%!
set adapterfound=false
)
)
Rem | Echo Each Result
echo !adapter!: !adress!
)
)
pause
GOTO :EOF
要获取有关任何命令的帮助,请执行以下操作:
call /?
set /?
for /?
if /?
find /?
答案 1 :(得分:0)
我建议使用以下代码。
我不知道它的准确性如何,(未经测试),但是我敢肯定,与其他“批处理”产品相比,它识别蓝牙,MiniPort或WiFi适配器的可能性较小我见过的基于方法的方法。
@Echo Off
Set "MACs="
For /F "Skip=1 Delims=" %%A In ('
"WMIC /NameSpace:\\root\WMI Path MSNdis_PhysicalMediumType Where (NdisPhysicalMediumType='0' Or NdisPhysicalMediumType='14') Get InstanceName 2>Nul"
') Do For /F "Tokens=*" %%B In ("%%A") Do Call :Sub %%B
If Defined MACs Echo %MACs::=%|Clip
Exit /B
:Sub
For /F "Skip=1" %%C In ('
"WMIC Path Win32_NetworkAdapter Where (AdapterTypeID='0' And Name='%*' And NetConnectionStatus='2' And PhysicalAdapter='True') Get MACAddress 2>Nul"
') Do For /F "Tokens=*" %%D In ("%%C") Do If Not Defined MACs (
Set "MACs=%%D") Else Call Set "MACs=%%MACs%% %%D"
我已经按照您的问题在NetConnectionStatus
的{{1}}中进行了过滤。如果不太可能同时连接多个以太网适配器,则应从2
行中删除And NetConnectionStatus='2'
。
注意:网络适配器名称中包含有害字符,可能会导致此代码失败。