在Windows命令行中获取接口名称、IP和MAC

在Windows命令行中获取接口名称、IP和MAC,windows,cmd,command-line,wmic,ipconfig,Windows,Cmd,Command Line,Wmic,Ipconfig,我想得到一个机器上所有接口、IP和MAC地址的列表。我有相当多的机器来获取这些信息(大约600台),我不能在这些设备上使用批处理文件。我想发送命令并返回一个回音输出 我需要的所有信息都在ipconfig/All中,但我不知道如何用for循环解析它。我对这个复杂的循环还是很陌生的。基本上,如果可能的话,我需要一行输出。有什么建议吗 主机名、接口1名称、IP、Mac、接口2名称、IP Mac等 编辑: 我在WMIC输出方面有点运气,但在文件中正确显示时遇到了问题。如果我运行这些 wmic compu

我想得到一个机器上所有接口、IP和MAC地址的列表。我有相当多的机器来获取这些信息(大约600台),我不能在这些设备上使用批处理文件。我想发送命令并返回一个回音输出

我需要的所有信息都在
ipconfig/All
中,但我不知道如何用for循环解析它。我对这个复杂的循环还是很陌生的。基本上,如果可能的话,我需要一行输出。有什么建议吗

主机名、接口1名称、IP、Mac、接口2名称、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
。也可以将输出文件作为文本前的空行。没什么大不了的,但很奇怪。关于如何将所有信息正确地输入到文件中,有什么建议吗?下面是我的示例输出

Node,IPAddress,MACAddress  
U8001674-TPL-A,{10.91.35.84;fe80::52b:9817:6bbf:dca4},F0:1F:AF:2A:5E:B5

下面是一个
wmic
解决方案,结果是
echo=!主机名!,!NetConID!,!IP地址!,!麦加本地计算机的每个活动适配器一行(无法尝试对远程计算机运行它所需的自适应):

另一种解决方案解析来自
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其中“IPEnabled=True”获取ipaddress
。。。还有你想得到的东西。不需要解析输出

问:我不能在设备上使用批处理文件。我想发送该命令并返回回显输出。
我的解决方案尝试使用单个命令行。
我还使用了2个循环来更好地优化数据搜索

因此,也可以尝试以下解决方案:

@for /f "skip=2 delims=, tokens=1,2,3,4" %L in ('wmic nic where "netenabled=true" get macaddress^,index^,netconnectionid^,productname /format:csv') do @for /f "skip=2 delims={}, tokens=2" %A in ('wmic nicconfig where "index=%M" get ipaddress^,ipsubnet ^/format:csv') do @echo %L - %O - %N - %A

for/F“tokens=1*delims=:%G in('ipconfig/all')do@echo%G%H开始查看示例。然后您可以将过于简单的
@echo%G%H
替换为。请随时了解实际的成就,并询问更多信息,以防您在某些方面遇到困难。查看
wmic-nicconfig/?
然后执行以下操作:
wmic/node:remotePCnetname\u或\u IP/user:domain\admin/password:domain-adminpass-nicconfig其中的“DNSDomain-like”%。%获取MACAddress、IPAddress、DNSHostName/format:csv
(只是盐的味道)。这不是最终的答案,但这是你找到自己答案的途径。给一个人一条鱼,他可以吃一天;但教他使用互联网,他几周内不会打扰你。--史蒂文·赖特我在ipconfig/all上的for循环问题是如何为每一行获取不同的数据集。wmic更接近,但我不是s您知道如何组合两个查询。'wmic nic get-netconnectionID'这将为我提供接口名称,但这会为我提供所需的IP和MAC,并且只显示已启用的接口,这样就可以消除server 2008隧道垃圾。'wmic nicconfig where-IPEnabled=True get-ipaddress,macaddress'如果我可以组合这些,则会获得很多CLO我可以在excel中输入一个宏。另一个更新。所以我需要这三个命令来确定如何组合。我不介意主机名是否在每一行。wmic computersystem get name wmic nic where netenabled=true get netconnectionID wmic nicconfig where IPEnabled=true get ipaddress,macaddressPlease添加有关您的解决方案的更多详细信息,为什么您的解决方案有效?提出问题的用户做错了什么?请执行此操作以完成您的回答,这样将有助于将来有相同问题的用户。谢谢!
@for /f "skip=2 delims=, tokens=1,2,3,4" %L in ('wmic nic where "netenabled=true" get macaddress^,index^,netconnectionid^,productname /format:csv') do @for /f "skip=2 delims={}, tokens=2" %A in ('wmic nicconfig where "index=%M" get ipaddress^,ipsubnet ^/format:csv') do @echo %L - %O - %N - %A