[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何提取文本中IP地址?

本帖最后由 pdp320921 于 2011-4-3 00:07 编辑

arp -a得出下面的信息,如何分别提取192.168.101.102
192.168.101.1
192.168.101.100
单独提取arp-a中的ip地址,赋给变量(一个IP地址赋给一个变量)~~

Interface: 192.168.101.102 --- 0xb
  Internet Address      Physical Address      Type
  192.168.101.1         00-1a-70-e9-a6-9d     dynamic   
  192.168.101.100       1c-75-08-89-ab-12     dynamic   
  192.168.101.255       ff-ff-ff-ff-ff-ff     static   
  224.0.0.22            01-00-5e-00-00-16     static   
  224.0.0.252           01-00-5e-00-00-fc     static   
  255.255.255.255       ff-ff-ff-ff-ff-ff     static   

注明:第一行为空行。
提取第一个
  1. for /f "skip=1 tokens=2 delims=:" %%i in ('arp -a') do @echo %%i
复制代码
好像不行
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in ('arp -a') do (
  3. set /a n+=1
  4. echo>!n!.txt %%i
  5. )
复制代码

TOP

2# zm900612
感谢楼上的回复,可能我没描述清楚,我只是想单独提取arp-a中的ip地址,赋给变量(一个IP地址赋给一个变量)~~
我修改下内容好了

TOP

  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. set n=
  4. for /f "tokens=1-3" %%a in (' arp -a ') do (
  5.     if "%%a" == "Interface:" (
  6.         set /a n += 1
  7.         set IP_!n!=%%b
  8.     ) else if "%%c" == "dynamic" (
  9.         set /a n += 1
  10.         set IP_!n!=%%a
  11.     )
  12. )
  13. set IP_
  14. pause
复制代码

TOP

4# tmplinshi
可以提取第一个IP,但不懂什么意思?能帮忙解释下吗?谢谢!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in ('arp -a') do (
  3. set /a n+=1
  4. set ip!n!=%%i
  5. )
  6. set ip
  7. pause
复制代码

TOP

4# tmplinshi

我自己写了个提取第一个ip地址的
  1. for /f "tokens=2 delims=:-" %i in ('arp -a ^|findstr /c:"Interface"') do @echo %i
复制代码
可是想提取第二和第三个IP地址,却不知如何实现?(最好是利用简短的命令行(同上)

TOP

本帖最后由 tmplinshi 于 2011-3-31 18:43 编辑

7# pdp320921
  1. for /f "delims=Interfac: " %i in ('arp -a^|findstr ": mic"') do @echo %i
复制代码

TOP

本帖最后由 pdp320921 于 2011-3-31 18:58 编辑

8# tmplinshi

好强大,版主好给力!
我其实是想用3条命令行分别得出3个IP地址~

不知3个IP是否可以单独输出?
还有就是可以不依照dynamic吗?因为有时候可能是静态IP地址

TOP

  1. for /f "tokens=2" %i in ('arp -a^|findstr :') do echo %i
复制代码
  1. for /f %i in ('arp -a^|findstr "mic 动"') do echo %i
复制代码
  1. for /f %i in ('arp -a^|findstr "tic 静"') do echo %i
复制代码
是这个意思吗?

TOP

本帖最后由 pdp320921 于 2011-3-31 22:29 编辑

10# tmplinshi

版主果然很强大,谢谢版主

都因为没理解findstr的精髓啊!

如果几个都是动态或都是静态IP地址,该又如何单独去提取?
譬如:
192.168.101.1         00-1a-70-e9-a6-9d     dynamic   
192.168.101.100     1c-75-08-89-ab-12      dynamic   
192.168.101.102     .............................       dynamic
...
....

TOP

11# pdp320921


单独提取是什么意思?

TOP

  1. for /f "tokens=2" %i in ('arp -a^|findstr :') do echo %i
复制代码
这句提取第一个IP
  1. ....
复制代码
这句提取第二个IP
  1. ....
复制代码
这句提取第三个IP
.....

TOP

  1. for /f "tokens=2" %i in ('arp -a^|findstr :') do echo %i
复制代码
  1. for /f "tokens=2" %i in ('arp -a^|findstr /n .^|findstr 4:') do echo %i
复制代码
  1. for /f "tokens=2" %i in ('arp -a^|findstr /n .^|findstr 5:') do echo %i
复制代码
2

评分人数

TOP

14# tmplinshi

再次感谢版主,应该差不多了,我要回去好好补补课了~

TOP

返回列表