我想获得一个机器上的所有接口,IP和MAC地址的列表。 我有相当多的机器从(大约600)获取这些信息,我不能在设备上使用batch file。 我想发送命令并获取回显输出。
所有我需要的信息是在ipconfig /all
但我不知道如何去parsing出一个for循环。 我对这个循环的复杂性还是比较陌生的。 基本上我需要得到一个class轮输出,如果可能的话。 有什么build议么?
hostname, interface1 name, IP, Mac, interface2 name, ip mac,...
等等
编辑:我有WMIC
输出一些运气,但我有问题得到它在一个文件中正确显示。 如果我运行这些。
wmic computersystem get name wmic nic where netenabled=true get netconnectionID wmic /output:C:\wmictest.csv nicconfig where IPEnabled=True get ipaddress, macaddress /format:csv
我的输出不显示netconnectionID
。 另外输出文件为文本之前的空白行。 不是一个大问题,但是很奇怪。 有关如何正确地获取所有信息的任何build议? 这里是我的示例输出。
Node,IPAddress,MACAddress U8001674-TPL-A,{10.91.35.84;fe80::52b:9817:6bbf:dca4},F0:1F:AF:2A:5E:B5
这是一个由echo =!HostName!,!NetConID!,!IP_Addrs!,!MAC_Addr!
对于本地计算机的每个活动适配器都有一行(不能尝试对远程计算机运行所需的适配):
@ECHO OFF >NUL @SETLOCAL enableextensions enabledelayedexpansion set "HostName=" wmic computersystem get name ^ /format:textvaluelist.xsl>"%temp%\cmptr.txt" 2>nul for /F "tokens=1* delims==" %%G in ('type "%temp%\cmptr.txt"') do ( if /i "%%G"=="Name" set "HostName=%%~H" ) set "MAC_Addr=" for /F "tokens=1* delims=:" %%G in ('ipconfig /all^|find /i "Physical Address"') do ( set "foo=" for %%I in (%%~H) do if not "%%~I"=="" set "foo=%%~I" set "MAC_Addr=!foo:-=:!" set "NetConID=" wmic nic where "NetEnabled='true' and MACAddress='!MAC_Addr!'" ^ list /format:textvaluelist.xsl>"%temp%\wmcnc.txt" 2>&1 for /F "tokens=1* delims==" %%I in ('type "%temp%\wmcnc.txt"') do ( if /i "%%I"=="NetConnectionID" set "NetConID=%%~J" ) set "IP_Addrs=" wmic nicconfig where "IPEnabled='True' and MACAddress='!MAC_Addr!'" ^ list /format:textvaluelist.xsl>"%temp%\wmcnccfg.txt" 2>&1 for /F "tokens=1* delims==" %%I in ('type "%temp%\wmcnccfg.txt"') do ( if /i "%%I"=="IPAddress" set "IP_Addrs=%%~J" ) if not "!NetConID!,!IP_Addrs!"=="," ( @echo =!HostName!,!NetConID!,!IP_Addrs!,!MAC_Addr! ) ) :endlocal del "%temp%\cmptr.txt" 2>nul del "%temp%\wmcnc.txt" 2>nul del "%temp%\wmcnccfg.txt" 2>nul @ENDLOCAL goto :eof
另一个解决方案解析来自ipconfig /ALL
半线性输出,并给出最接近之前wmic
一个的结果,如下所示:
@ECHO OFF >NUL @SETLOCAL enableextensions enabledelayedexpansion set "HostName=" set "NetConID=" set "IP_Addr4=" set "IP_Addr6=" set "MAC_Addr=" for /F "tokens=1* delims=:" %%G in ('ipconfig /ALL') do ( set "foo=%%~G" if not "!foo:Host name=!"=="!foo!" ( for %%I in (%%~H) do if not "%%~I"=="" set "HostName=%%~I" ) if "!foo:adapter=!"=="!foo!" ( if not "!foo:Physical Address=!"=="!foo!" ( for %%I in (%%~H) do if not "%%~I"=="" set "MAC_Addr=%%~I" ) if not "!foo:IPv4 Address=!"=="!foo!" ( for %%I in (%%~H) do if not "%%~I"=="" set "IP_Addr4=%%~I" set "IP_Addr4=!IP_Addr4:(preferred)=!" ) if not "!foo:local IPv6 Address=!"=="!foo!" ( for %%I in (%%~H) do ( if not "%%~I"=="" ( for /F "delims=%%" %%p in ("%%~I") Do set "IP_Addr6=%%~p" rem set "IP_Addr6=!IP_Addr6:(preferred)=!" ) ) ) ) else ( if not "!IP_Addr6!,!IP_Addr4!"=="," ( @echo #!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr! ) set "MAC_Addr=" set "IP_Addr4=" set "IP_Addr6=" set "NetConID=!foo:*adapter =!" ) ) if not "!IP_Addr6!,!IP_Addr4!"=="," ( @echo =!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr! ) :endlocal @ENDLOCAL goto :eof
我会用:
wmic nicconfig where "IPEnabled = True" get ipaddress
…和你想得到的东西。 没有必要解析输出。