标题: [网络连接] [已解决]批处理如何从nslookup命令的输出里面获取IP? [打印本页]
作者: mousesjf 时间: 2012-5-6 11:04 标题: [已解决]批处理如何从nslookup命令的输出里面获取IP?
各位大大好,我现在有这样一个需求,是nslookup一个域名,然后输出它的IP,域名#IP(有些域名有好几个IP)的形式输出,以电信的网络为例,比如我在domain.txt里面保存的是
zy.xunlei.com
我希望输出到ipdomain.txt的是如下内容- zy.xunlei.com#121.14.82.142
- zy.xunlei.com#114.80.189.6
- zy.xunlei.com#114.80.189.7
- zy.xunlei.com#114.80.189.8
- zy.xunlei.com#114.80.189.9
- zy.xunlei.com#121.14.82.140
- zy.xunlei.com#121.14.82.141
复制代码
当我使用这样的批处理(也是在论坛上找到然后修改的)时- @echo off
- for /f "delims=" %%a in (D:\domain.txt) do (
- for /f "skip=1 tokens=2 delims=, " %%b in ('nslookup %%a 2^>nul^|findstr "[0123456789\.]"') do (call echo %%a#%%b>>ipdomain.txt))
- type ipdomain.txt
- pause
复制代码
输出的内容却是- zy.xunlei.com#movie.co.sandai.net
- zy.xunlei.com#121.14.82.142
- zy.xunlei.com#114.80.189.6
- zy.xunlei.com#114.80.189.7
- zy.xunlei.com#114.80.189.8
- zy.xunlei.com#114.80.189.9
- zy.xunlei.com#121.14.82.140
- zy.xunlei.com#121.14.82.141
- zy.xunlei.com#zy.xunlei.com
- zy.xunlei.com#movie.xunlei.com
复制代码
里面会把名称以及Aliases的内容输入进去,当然这是因为我查找的字符串是只要包含数字和点就OK了,我按照网上的正则表达式写法,把findstr "[0123456789\.]"改为findstr "^[0-9^.]*$",意思是除数字和点之外的字符串之外都过滤,我在本地使用的时候,可以正确输出需要的内容,但我运行脚本处理nslookup命令时却没有任何的输出,百思不得其解,所以上论坛来请教,谢谢各位!
此外,我想问一下脚本中2^>nul^是什么意思?
-------------------------------------
正确的代码应为:- @echo off
- for /f "delims=" %%a in (D:\D2993-3993.txt) do (
- 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))
- type ipD2993-3993.txt
- 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
我粗略修改了一下,你自己再優化吧- @echo off
- for /f "delims=" %%a in (domain.txt) do (
- 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
- start ipdomain.txt
复制代码
作者: mousesjf 时间: 2012-5-7 09:53
回复 4# andyrave
zy.xunlei.com 是我自己加入的输出,%%b里面是不包含英文的。
我修改好了。- @echo off
- for /f "delims=" %%a in (D:\D2993-3993.txt) do (
- 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))
- type ipD2993-3993.txt
- 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 |