Board logo

标题: [文本处理] [已解决]批处理如何提取文本中IP地址? [打印本页]

作者: pdp320921    时间: 2011-3-31 15:40     标题: [已解决]批处理如何提取文本中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
复制代码
好像不行
作者: CrLf    时间: 2011-3-31 15:52

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

作者: pdp320921    时间: 2011-3-31 16:10

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

  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
复制代码

作者: pdp320921    时间: 2011-3-31 16:56

4# tmplinshi
可以提取第一个IP,但不懂什么意思?能帮忙解释下吗?谢谢!
作者: CrLf    时间: 2011-3-31 17:10

  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
复制代码

作者: pdp320921    时间: 2011-3-31 18:19

4# tmplinshi

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

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

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

作者: pdp320921    时间: 2011-3-31 18:51

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

8# tmplinshi

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

不知3个IP是否可以单独输出?
还有就是可以不依照dynamic吗?因为有时候可能是静态IP地址
作者: tmplinshi    时间: 2011-3-31 19:14

  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
复制代码
是这个意思吗?
作者: pdp320921    时间: 2011-3-31 19:59

本帖最后由 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
...
....
作者: tmplinshi    时间: 2011-3-31 22:31

11# pdp320921


单独提取是什么意思?
作者: pdp320921    时间: 2011-3-31 22:44

  1. for /f "tokens=2" %i in ('arp -a^|findstr :') do echo %i
复制代码
这句提取第一个IP
  1. ....
复制代码
这句提取第二个IP
  1. ....
复制代码
这句提取第三个IP
.....
作者: tmplinshi    时间: 2011-3-31 23:06

  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
复制代码

作者: pdp320921    时间: 2011-3-31 23:23

14# tmplinshi

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2