[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
恩,这样修改可以解决你的问题吗?程序没什么问题,就是可以吧findstr /n .*给去掉了,刚才是因为提取行数才用的,现在是查找“time”了,所以不用这个也可以。

TOP

又做了一个改进:
for /f "tokens=4 delims= " %%k in ('dig @%%j %%i^|findstr /n ".*"^|findstr "time"')
可以按空格" "来划分域,选第四个域,就可以直接输出时间。另外想请教一下,你程序里很多地方都带有^符号,不知道是什么含义^|和%%i^有区别么?
还有就是set /p=    %%j(%%i^) <nul>>result.txt
这个语句是什么意思啊?是不是遇到nul就跳出?/p ?

[ 本帖最后由 in2bat 于 2008-12-28 22:30 编辑 ]

TOP

出现多余的 XXXmsec  的原因是在某次循环的某次dig中出现的query time 不止一个,程序中没有设置写入result.txt的个数的限制,所以每次循环每次dig出现几个query time ,则往文件中写入几个值。你再测试下你的dig.exe看看是不是这种情况。

TOP

是的,我对程序有做了一下修改,修改如下:
1、把for循环的先后顺序颠倒了一下;
2、取列标题ip地址部分改为最后三位了;
3、dig内容改为dig @ip地址 www网址,这样dig出来的结果只有一个time,否则就会出现多个time字段,我测试了tom.com这个网站发现的,这个原因导致了结果会有time数大于列标题数量,不知道我说的是否清晰;
感谢兄台~
目前批处理结果如下:

@echo off&setlocal enabledelayedexpansion
cd.>result.txt
for /f "tokens=4 delims=." %%j in (dnsip.txt) do (
    for /f "tokens=2 delims=." %%i in (www.txt) do (
        set /p=    %%j(%%i^) <nul>>result.txt
    )
)
echo.>>result.txt
for /l %%a in (1 1 5) do (
    cls
    echo 正在执行第 %%a 次
    set /p=%%a    <nul>>result.txt
    for /f %%j in (dnsip.txt) do (
       for /f %%i in (www.txt) do (
           for /f "tokens=3 delims=:" %%k in ('dig @%%j %%i^|findstr /n ".*"^|findstr "time"') do (
               set /p=%%k     <nul>>result.txt
           )
       )
    )
    echo.>>result.txt
)
echo.&echo 执行完毕!
pause>nul

TOP

我看到你的结果了,网址有11个,ip地址有三个,组合起来每循环一次应该执行33次,即每一行应该有33个 XXmsec可是你的结果中每次循环后怎么不止33个,原因应该是这个吧?

[ 本帖最后由 lhjoanna 于 2008-12-28 22:10 编辑 ]

TOP

我dig的结果只有一个query time,所以我就取了time关键字,但是我用你的程序输出之后转换成.csv,再数据分列之后发现结果也比较怪异,正常是每个列标题下对应时间,但我分列结果还有很多时间上面没有列标题:
219.148.198.131(tom)219.148.198.136(tom)
359250250265250250312
265265265265265250265
265281265265250265265
265250250250234265250
265265250265250265250

我把我的结果给你看看,你可以转换成.xls分列看看效果。

TOP

恩,咱们的dig版本不一样。不过如果每次的行数不一样,那就不能用行数来提取时间了,楼主关于query time的提取有什么规律吗?比如find "time'后会出现好几个query time,楼主想要的是第几个?

[ 本帖最后由 lhjoanna 于 2008-12-28 21:52 编辑 ]

TOP

改成:'dig %%j %%i^|findstr /n ".*"^|findstr "time"'
测试就正常了,感觉速度很慢啊,呵呵,
结果如下:
    219.148.198.130(yahoo)     219.148.198.131(yahoo)     219.148.198.136(yahoo)     219.148.198.130(chinatelecom)     219.148.198.131(chinatelecom)     219.148.198.136(chinatelecom)     219.148.198.130(163)     219.148.198.131(163)     219.148.198.136(163)     219.148.198.130(taobao)     219.148.198.131(taobao)     219.148.198.136(taobao)     219.148.198.130(baidu)     219.148.198.131(baidu)     219.148.198.136(baidu)     219.148.198.130(17173)     219.148.198.131(17173)     219.148.198.136(17173)     219.148.198.130(sohu)     219.148.198.131(sohu)     219.148.198.136(sohu)     219.148.198.130(xinhuanet)     219.148.198.131(xinhuanet)     219.148.198.136(xinhuanet)     219.148.198.130(qq)     219.148.198.131(qq)     219.148.198.136(qq)     219.148.198.130(sina)     219.148.198.131(sina)     219.148.198.136(sina)     219.148.198.130(tom)     219.148.198.131(tom)     219.148.198.136(tom)
1     250 msec            343 msec            250 msec            250 msec            250 msec            250 msec            265 msec            250 msec            250 msec            250 msec            265 msec            265 msec            250 msec            281 msec            250 msec            250 msec            281 msec            250 msec            265 msec            328 msec            250 msec            265 msec            250 msec            250 msec            265 msec            281 msec            265 msec            265 msec            250 msec            250 msec            250 msec            359 msec            250 msec            250 msec            265 msec            250 msec            250 msec            312 msec            265 msec            250 msec            250 msec            265 msec            265 msec            343 msec            265 msec            265 msec            265 msec            250 msec            250 msec            328 msec            250 msec            250 msec            265 msec            250 msec            265 msec            437 msec            250 msec            250 msec            265 msec            281 msec            250 msec            375 msec            250 msec            265 msec            265 msec            250 msec           
2     250 msec            250 msec            265 msec            265 msec            265 msec            250 msec            265 msec            250 msec            281 msec            265 msec            265 msec            281 msec            281 msec            265 msec            281 msec            265 msec            281 msec            281 msec            281 msec            265 msec            250 msec            328 msec            265 msec            281 msec            281 msec            281 msec            265 msec            265 msec            250 msec            265 msec            265 msec            265 msec            265 msec            265 msec            265 msec            265 msec            250 msec            265 msec            250 msec            250 msec            265 msec            265 msec            296 msec            265 msec            265 msec            250 msec            265 msec            265 msec            250 msec            250 msec            343 msec            250 msec            265 msec            250 msec            250 msec            250 msec            265 msec            265 msec            250 msec            250 msec            265 msec            265 msec            265 msec            281 msec            265 msec            265 msec           
3     265 msec            250 msec            265 msec            265 msec            281 msec            250 msec            250 msec            265 msec            281 msec            281 msec            265 msec            281 msec            281 msec            265 msec            281 msec            265 msec            265 msec            265 msec            359 msec            343 msec            296 msec            250 msec            250 msec            281 msec            250 msec            250 msec            265 msec            265 msec            265 msec            281 msec            296 msec            265 msec            281 msec            265 msec            265 msec            250 msec            265 msec            265 msec            265 msec            250 msec            250 msec            250 msec            265 msec            250 msec            250 msec            250 msec            250 msec            265 msec            250 msec            265 msec            265 msec            250 msec            250 msec            265 msec            250 msec            421 msec            265 msec            265 msec            265 msec   

只能再做一次查询替换了,再问一下如何直接生成*.csv格式的,每个区域占一个单元格。

TOP

我想要的是:30:;; Query time: 375 msec,而这个对不同的网站,行号是不同的。

TOP

C:\Documents and Settings\Administrator>dig 219.148.198.130  www.yahoo.com.cn |
indstr /n .*
1:;; Got answer:
2:;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1094
3:;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
4:
5:;; QUESTION SECTION:
6:;219.148.198.130.             IN      A
7:
8:;; AUTHORITY SECTION:
9:.                     8103    IN      SOA     A.ROOT-SERVERS.NET. NSTLD.VERIS
GN-GRS.COM. 2008122800 1800 900 604800 86400
10:
11:;; Query time: 281 msec
12:;; SERVER: 219.148.198.130#53(219.148.198.130)
13:;; WHEN: Sun Dec 28 21:34:39 2008
14:;; MSG SIZE  rcvd: 108
15:
16:
17:; <<>> DiG 9.3.2 <<>> 219.148.198.130 www.yahoo.com.cn
18:;; global options:  printcmd
19:;; Got answer:
20:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1102
21:;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
22:
23:;; QUESTION SECTION:
24:;www.yahoo.com.cn.           IN      A
25:
26:;; ANSWER SECTION:
27:www.yahoo.com.cn.    40477   IN      CNAME   homepage.vip.cnb.yahoo.com.
28:homepage.vip.cnb.yahoo.com. 300      IN      A       202.165.102.205
29:
30:;; Query time: 375 msec
31:;; SERVER: 219.148.198.130#53(219.148.198.130)
32:;; WHEN: Sun Dec 28 21:34:39 2008
33:;; MSG SIZE  rcvd: 90
34:
C:\Documents and Settings\Administrator>

TOP

在我这里测试正常啊,没有出现108的情况。我明白原因了,大概是咱们的dig版本不一样,你运行下dig 219.148.198.130  www.yahoo.com.cn |findstr /n .* 然后把结果发来。

TOP

TOP

我看了执行效果,我在帖子里回复了,返回的值是唯一的msec,感觉是不是dig有问题 了?我用我的程序的执行结果也给你写在帖子上了,其实我的程序是两个批处理,首先dig出来很多txt文件,每个txt文件,对应一个网址和ip,然后再把这些txt文件合并到一起。
但我发现我弄的合并批处理有丢失数据的问题。我把我的批处理给你弄上来:
dig.bat文件如下:
@echo off
setlocal enabledelayedexpansion
del d:\dns-result\*.txt
FOR /F %%i IN (D:\www.txt) DO (FOR /F %%j IN (D:\dnsip.txt) DO (
set viname=%%i
set vjname=%%j
echo !vjname:~-3!--!viname:~4! >d:\dns-result\!vjname:~-3!--!viname:~4!.txt
FOR /L %%a IN (1,1,50) DO (dig @%%j %%i | find  "time" >>d:\dns-result\!vjname:~-3!--!viname:~4!.txt )))
hebin.bat文件如下:
@echo off
cd.>>com.csv
set h=0
:h
if %h% GEQ 1 set "fc=skip=%h%"
set end=1
for /f %%i in ('dir /b *com*') do (
if not %%~nxi==com.csv set fi=%%~nxi&call:p
)
if %end%==0 echo.>>com.csv&set /a h+=1&goto h
pause
:p
for /f "eol=: %fc% delims=@" %%j in ('type %fi%') do (
set /p=%%j <nul>>com.csv
set end=0
set tab=0
echo %fi% %h% %tab%
echo %fi% %h% %tab% >>hebin.log
goto :eof
)
if "%tab%"=="1" set /p= <nul>>com.csv
set tab=1

TOP

打开文本文件后取消自动换行,第一行为dig的对象,所以少的时候清晰些。14是指dig后的结果的第14行,也就是第一个query time所在的行。至于108我也不清楚,楼主把你测试的www.txt和dnsip.txt的内容发来还有result.txt传上来,我调试下。

[ 本帖最后由 lhjoanna 于 2008-12-28 21:22 编辑 ]

TOP

楼上的兄台,我用你的批处理执行结果如下:
219.148.198.130(yahoo)     219.148.198.131(yahoo)     219.148.198.136(yahoo)     219.148.198.130(chinatelecom)     219.148.198.131(chinatelecom)     219.148.198.136(chinatelecom)     219.148.198.130(163)     219.148.198.131(163)     219.148.198.136(163)     219.148.198.130(taobao)     219.148.198.131(taobao)     219.148.198.136(taobao)     219.148.198.130(baidu)     219.148.198.131(baidu)     219.148.198.136(baidu)     219.148.198.130(17173)     219.148.198.131(17173)     219.148.198.136(17173)     219.148.198.130(sohu)     219.148.198.131(sohu)     219.148.198.136(sohu)     219.148.198.130(xinhuanet)     219.148.198.131(xinhuanet)     219.148.198.136(xinhuanet)     219.148.198.130(qq)     219.148.198.131(qq)     219.148.198.136(qq)     219.148.198.130(sina)     219.148.198.131(sina)     219.148.198.136(sina)     219.148.198.130(tom)     219.148.198.131(tom)     219.148.198.136(tom)
1     108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108           
2     108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108            108           
为什么会全是108啊?是不是脚本里的'dig %%j %%i^|findstr /n ".*"^|findstr "14:"'有问题啊,感觉脚本执行速度特别慢,有时间的话,继续探讨啊,我要dig 50次或100次,我最后用我自己的程序得到的结果如下:
130--163.com   130--17173.com   130--baidu.com.cn   130--chinatelecom.cn
;; Query time: 0 msec  ;; Query time: 93 msec  ;; Query time: 31 msec
;; Query time: 0 msec  ;; Query time: 0 msec  ;; Query time: 0 msec  
;; Query time: 0 msec  ;; Query time: 0 msec  ;; Query time: 0 msec  
;; Query time: 0 msec  ;; Query time: 0 msec  ;; Query time: 0 msec  
;; Query time: 0 msec  ;; Query time: 0 msec  ;; Query time: 0 msec  
;; Query time: 0 msec  ;; Query time: 15 msec  ;; Query time: 0 msec
最后还要做查询-替换处理~

TOP

返回列表