找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29854|回复: 4

[文件操作] 批处理如何提取nslookup域名解析结果中的ip地址并按指定格式输出

[复制链接]
发表于 2016-10-21 10:34:30 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-10-21 12:48 编辑

求助:代码实现不了效果,编程实在不会
1、文本文件List.txt内容如下:
baidu.com
sina.com.cn

2、上面域名在cmd下nslookup后的结果如下:

C:\>nslookup baidu.com
服务器:  google-public-dns-a.google.com
Address:  8.8.8.8

非权威应答:
名称:    baidu.com
Addresses:  180.149.132.47
          220.181.57.217
          111.13.101.208
          123.125.114.144


C:\>nslookup sina.com.cn
服务器:  google-public-dns-a.google.com
Address:  8.8.8.8

非权威应答:
名称:    sina.com.cn
Addresses:  202.108.33.107
          202.108.33.60


C:\>


3、在论坛里搜索到的代码,然后自己改了好久,只改到这种程度,如下:
@echo off
(  for /f "delims=" %%a in (List.txt) do (
        for /f "delims=" %%b in ('nslookup %%a^|findstr "[0-9]$"') do (
             set "Address=%%b"
             set "Addresses=%%c"
             setlocal enabledelayedexpansion
             set "Address=!Address:*:=!"
             set "Addresses=!Address:*:=!"
             for %%d in (!Address!) do (
                for %%e in (!Addresses!) do echo,DNS地址:%%d 域名:%%a 域名地址:%%e
                endlocal
                )
            )
        )
  )>>Answer.txt


4、Answer.txt文件内容应该如下:
DNS地址:8.8.8.8 域名:baidu.com 域名地址:180.149.132.47
                           域名:baidu.com 域名地址:220.181.57.217
                           域名:baidu.com 域名地址:111.13.101.208
                           域名:baidu.com 域名地址:123.125.114.144
DNS地址:8.8.8.8 域名:sina.com.cn 域名地址:202.108.33.107
                           域名:sina.com.cn 域名地址:202.108.33.60


这个代码,我实在改不出来了,更别说answer.txt的理想内容如标题4的格式了!

求助大神,帮忙改改,谢谢!!

评分

参与人数 1PB -3 收起 理由
pcl_test -3 未按版规发帖

查看全部评分

发表于 2016-10-21 11:40:02 | 显示全部楼层
本帖最后由 DiamondbacK 于 2016-10-21 12:07 编辑

第三方 sed
  1. # 2>nul 3>&2 & echo off & cls
  2. # & nslookup.exe < domain_list.txt | sed -rnf "%~f0" > Answer.txt
  3. # & pause & exit /b
  4. # 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本

  5. :L0
  6. /^>/ {
  7.   h
  8.   $! n
  9.   :L1
  10.   /^>/! {
  11.     H
  12.     $! { n; b L1 }
  13.   }
  14.   x
  15.   s/^.+Address: *([.0-9]+)\s+名称: *([-.[:alnum:]]+)\nAddresses:\s*/域名: \2, DNS 地址: \1, 解析地址: /
  16.   :L2
  17.   s/^(.+解析地址: )(.*\n)\s*([.0-9]+)/\1\2\1\3/
  18.   t L2
  19.   p
  20.   g
  21.   $! b L0
  22. }
复制代码
第三方 gawk
  1. # 2>nul 3>&2 & echo off & cls
  2. # & nslookup.exe < domain_list.txt | gawk -f "%~f0" > Answer.txt
  3. # & pause & exit /b
  4. # 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本

  5. BEGIN { RS = "\n*>"; FS = "[:\n]+[\t ]*" }
  6. $7 == "Addresses" {
  7.   for (i = 8; i <= NF; i++) {
  8.     print "域名: " $6 ", DNS 地址: " $4 ", 解析地址: " $i
  9.   }
  10. }
复制代码
Windows 7 以上系统自带
  1. :: 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本
  2. @echo off

  3. PowerShell -c "(gc .\domain_list.txt | nslookup.exe) -join "`n" -split '\n*>' | %% { $fields = $_ -split '[:\n]+[\t ]*'; if ($fields[6] -eq 'Addresses') { for ($i = 7; $i -lt $fields.count; $i++) { "域名: $($fields[5]), DNS 地址: $($fields[3]), 解析地址: $($fields[$i])" }}} > Answer.txt"

  4. pause & exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
Bella + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-10-21 12:01:41 | 显示全部楼层
  多谢~   第三个可以,但是也不是太准确,我再自己改改,再次感谢!!
发表于 2016-10-21 14:48:23 | 显示全部楼层
本帖最后由 pcl_test 于 2016-10-21 16:07 编辑
  1. @echo off
  2. for /f %%a in ('more +22 "%~f0"') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%b in ('nslookup %%a 2^>^&1') do (   
  5.         for /f "tokens=1,2" %%c in ("#%%b") do (
  6.             if /i "%%c" equ "#Address:" (
  7.                 set /p=DNS地址:%%d 域名:%%a<nul
  8.                 set s=%%dfedcba9876543210&set/an=0x!s:~15,1!
  9.                 for /l %%i in (1 1 !n!) do set "space=!space! "
  10.             ) else (
  11.                 if not defined f (
  12.                     if /i "%%c" equ "#Addresses:" (
  13.                         echo; 域名地址:%%d
  14.                         set f=1
  15.                     )
  16.                 ) else if "%%c" equ "#" echo;          !space!域名:%%a 域名地址:%%d
  17.             )
  18.         )
  19.     )
  20.     endlocal&echo;
  21. )
  22. pause&exit
  23. baidu.com
  24. sina.com.cn
复制代码

评分

参与人数 1技术 +1 收起 理由
Bella + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-10-21 18:02:45 | 显示全部楼层
感谢版主:pcl_test     这个代码相当好用~~谢谢了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:25 , Processed in 0.034440 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表