Board logo

标题: [网络连接] [已解决]批处理如何从nslookup命令的输出里面获取IP? [打印本页]

作者: mousesjf    时间: 2012-5-6 11:04     标题: [已解决]批处理如何从nslookup命令的输出里面获取IP?

各位大大好,我现在有这样一个需求,是nslookup一个域名,然后输出它的IP,域名#IP(有些域名有好几个IP)的形式输出,以电信的网络为例,比如我在domain.txt里面保存的是
zy.xunlei.com

我希望输出到ipdomain.txt的是如下内容
  1. zy.xunlei.com#121.14.82.142
  2. zy.xunlei.com#114.80.189.6
  3. zy.xunlei.com#114.80.189.7
  4. zy.xunlei.com#114.80.189.8
  5. zy.xunlei.com#114.80.189.9
  6. zy.xunlei.com#121.14.82.140
  7. zy.xunlei.com#121.14.82.141
复制代码
当我使用这样的批处理(也是在论坛上找到然后修改的)时
  1. @echo off
  2. for /f "delims=" %%a in (D:\domain.txt) do (
  3. for /f "skip=1 tokens=2 delims=, " %%b in ('nslookup %%a 2^>nul^|findstr "[0123456789\.]"') do (call echo %%a#%%b>>ipdomain.txt))
  4. type ipdomain.txt
  5. pause
复制代码
输出的内容却是
  1. zy.xunlei.com#movie.co.sandai.net
  2. zy.xunlei.com#121.14.82.142
  3. zy.xunlei.com#114.80.189.6
  4. zy.xunlei.com#114.80.189.7
  5. zy.xunlei.com#114.80.189.8
  6. zy.xunlei.com#114.80.189.9
  7. zy.xunlei.com#121.14.82.140
  8. zy.xunlei.com#121.14.82.141
  9. zy.xunlei.com#zy.xunlei.com
  10. zy.xunlei.com#movie.xunlei.com
复制代码
里面会把名称以及Aliases的内容输入进去,当然这是因为我查找的字符串是只要包含数字和点就OK了,我按照网上的正则表达式写法,把findstr "[0123456789\.]"改为findstr "^[0-9^.]*$",意思是除数字和点之外的字符串之外都过滤,我在本地使用的时候,可以正确输出需要的内容,但我运行脚本处理nslookup命令时却没有任何的输出,百思不得其解,所以上论坛来请教,谢谢各位!
此外,我想问一下脚本中2^>nul^是什么意思?


-------------------------------------
正确的代码应为:
  1. @echo off
  2. for /f "delims=" %%a in (D:\D2993-3993.txt) do (
  3. for /f "skip=1 tokens=2 delims=, " %%b in ('nslookup %%a 2^>nul^|findstr "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*.[0-9]"') do (call echo %%a#%%b>>ipD2993-3993.txt))
  4. type ipD2993-3993.txt
  5. pause
复制代码

作者: mousesjf    时间: 2012-5-6 12:20

~~~
作者: mousesjf    时间: 2012-5-6 21:51

希望有人能帮助我~~
作者: andyrave    时间: 2012-5-7 00:50

如果域名里带数字的怎么办?例如163.com

zy.xunlei.com#movie1.xunlei.com 呢?
作者: Taurus    时间: 2012-5-7 07:48

本帖最后由 Taurus 于 2012-5-7 08:16 编辑

當然不行呀

1./
上面你寫好的那個bat,你findstr的是"包括"  "0-9"及"." 的字串,當然會有 "A-Z"加"." 的字串出現,因為有"."号的字串都合乎資格
2./
之後你又把findstr改為只限 "1-9"加"." 的字串(即是你說的findstr "^[0-9^.]*$"),但nslookup输出的卻又全都含有英文字(沒一項純數+點),當然就沒一串string合乎

即是:
1./
zy.xunlei.com#movie.co.sandai.net    >   你找包括"0-9"及"."就输出  = 結果全部strings都因為有"."所以全部都输出
2./
zy.xunlei.com#121.14.82.142             > 你找只限"0-9"加"."就输出   = 結果全部strings都因為有"英文"所以全部都不输出

作者: Taurus    时间: 2012-5-7 08:02

我粗略修改了一下,你自己再優化吧
  1. @echo off
  2. for /f "delims=" %%a in (domain.txt) do (
  3. for /f "skip=1 tokens=2 delims=, " %%b in ('nslookup %%a 2^>nul') do (echo %%b|findstr "^[0-9^.]*$">nul&&echo %%a#%%b))>ipdomain.txt
  4. start ipdomain.txt
复制代码

作者: mousesjf    时间: 2012-5-7 09:53

回复 4# andyrave
zy.xunlei.com 是我自己加入的输出,%%b里面是不包含英文的。
我修改好了。
  1. @echo off
  2. for /f "delims=" %%a in (D:\D2993-3993.txt) do (
  3. for /f "skip=1 tokens=2 delims=, " %%b in ('nslookup %%a 2^>nul^|findstr "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*.[0-9]"') do (call echo %%a#%%b>>ipD2993-3993.txt))
  4. type ipD2993-3993.txt
  5. pause
复制代码

作者: Taurus    时间: 2012-5-7 10:42

回复  andyrave
zy.xunlei.com 是我自己加入的输出,%%b里面是不包含英文的。
我修改好了。
mousesjf 发表于 2012-5-7 09:53

我指的是,你括号內的nslookup是帶英文的

情況是你在(nslookup|findstr)內是搜尋zy.xunlei.com 111.111.111.111格式的字串,之後由tokens及delims分拆為A,B
現在搜尋的是,全串str合乎"數.數.數.數"就會out put,即,"zy.1.2.3.4com test.com"也一樣輸出;
但正常是搜尋分拆後的ip位置,即test.com是否為數.數.數.數格式




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