如何从ipconfig的输出中提取IPv4 IP地址,然后对其进行过滤,以便我的输出只包含IP地址列表?


2

如何从ipconfig的输出中提取IPv4 IP地址

我仔细阅读了这篇文章,这非常有帮助。我只是想知道这是否只能提取IP地址(xxx.xxx.xxx.xxx)。最好的方法我可以想到使用记事本找到所有/替换所有。

有没有我可以通过命令行使用的方法?


您链接的问题以何种方式不能为您提供所需的所有信息?请不要回复评论; 编辑您的问题以更清晰,更完整。
G-Man 2010年

@G-Man显然,我对另一个问题的回答提供了一些线索,可以解决它的问题,但需要调整以提供OP想要的输出。大多数用户对批量编程的了解不足以进行这些更改。我已经为OP提供了答案,我相信他会回答他的问题。
DavidPostill

@ G-Man我对批处理文件非常熟练,但我仍然需要考虑如何将正则表达式添加到findstr以匹配虚线四元组IP地址。
DavidPostill

@DavidPostill:但我的观点是,你不需要。“搜索IPv4/拆分:/剥离前导空间”方法有效。并不是主持人总是指责用户“如果你发现自己在两个单独的问题(在同一个社区中)发布了大致相同的答案,你应该停下来,并将其中一个标记为副本而不是”?
G-Man

@ G-Man不,不。该方法仅找到第一个虚线四边形地址(恰好是包含字符串IP4的行)。如果您真的不愿意阅读我的答案,您会看到它提取了3个IP地址的列表。至于你的第二点,我的答案与我的其他答案大不相同
DavidPostill

Answers:


2

如何从ipconfig的输出中仅提取IP4地址列表?

使用以下批处理文件(test.cmd):

@echo off
setlocal
setlocal enabledelayedexpansion
for /f "usebackq tokens=2 delims=:" %%a in (`ipconfig ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"`) do (
  set _temp=%%a
  rem remove leading space
  set _ipaddress=!_temp:~1!
  echo !_ipaddress!
  )
endlocal

用法和输出示例:

> ipconfig | findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
   IPv4 Address. . . . . . . . . . . : 192.168.42.78
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.42.129

> test
192.168.42.78
255.255.255.0
192.168.42.129

进一步阅读

  • Windows CMD命令行的AZ索引 - 与Windows cmd行相关的所有内容的出色参考。
  • enabledelayedexpansion - 延迟扩展将导致变量在执行时而不是在解析时扩展。
  • for / f - 针对另一个命令的结果的循环命令。
  • ipconfig - 配置IP(Internet协议配置)
  • set - 显示,设置或删除CMD环境变量。使用SET进行的更改将仅在当前CMD会话期间保留。
  • setlocal - 设置选项以控制批处理文件中环境变量的可见性。
  • 变量 - 提取变量的一部分(子串)。

0

基于DavidPostill对您链接的问题的回答

@echo off
setlocal
setlocal enabledelayedexpansion
rem throw away everything except the IPv4 address line 
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr IPv4`) do (
  rem we have for example "IPv4 Address. . . . . . . . . . . : 192.168.42.78"
  rem split on ':' and get 2nd token
  for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
    rem we have " 192.168.42.78"
    rem split on '.' and get 4 tokens (octets)
    for /f "tokens=1-4 delims=." %%c in ("%%b") do (
      set _o1=%%c
      set _o2=%%d
      set _o3=%%e
      set _o4=%%f
      rem strip leading space from first octet
      set _4octet=!_o1:~1!.!_o2!.!_o3!.!_o4!
      echo !_4octet!
      )
    )
  )
endlocal

列出所报告的所有接口的IPv4地址ipconfig

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.