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

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

本帖最后由 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的格式了!

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

评分人数

感谢版主:pcl_test     这个代码相当好用~~谢谢了!!

TOP

本帖最后由 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

评分人数

    • Bella: 乐于助人技术 + 1

TOP

  多谢~   第三个可以,但是也不是太准确,我再自己改改,再次感谢!!

TOP

本帖最后由 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

评分人数

    • Bella: 乐于助人技术 + 1

TOP

返回列表