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

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

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

TOP

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

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

TOP

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

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

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

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

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

恩,这样修改可以解决你的问题吗?程序没什么问题,就是可以吧findstr /n .*给去掉了,刚才是因为提取行数才用的,现在是查找“time”了,所以不用这个也可以。

TOP

^是对特殊符号<,>,&等的前导字符,在命令中他将以上几个个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
比如
  1. echo test ^>1.txt
复制代码
显示结果则是:test > 1.txt
而不是把test追加到1.txt中。
在for /f %%i in ('.......') do (......)中,in后面的括号,若要用到这些字符,就要用^来转义下。^还有一个功能就是续行,比如
  1. @echo off
  2.    echo  我^
  3.   是^
  4.   中^
  5.   国^
  6.   人
  7. pause>nul
复制代码
我这样理解的,你可以到论坛里的教程看下比较详细的解释。

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

TOP

我把findstr /n .*给去掉后测试发现就没有结果了,不知道为什么
我运行批处理的时候还经常有报错出现,是不是这原因导致我有些数据丢失了呢?
正在执行第 50 次
\cvs\9_3_x\lib\isc\mem.c:877: INSIST(ctx->stats.gets == 0U) failed.
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

TOP

呵,是;; Query time: 50 msec中开头的';;'在作怪,你这样改:
for /f "tokens=3* delims=; " %%k in ('dig @%%j %%i^|findstr "time"') do (
               set /p=%%k %%l     <nul>>result.txt
)
或者
for /f "tokens=2* delims=; " %%k in ('dig @%%j %%i^|findstr "time"') do (
      set /p=%%l     <nul>>result.txt
)

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

TOP

发现问题了,呵呵,这样改也行吧
for /f "eol=: tokens=4 delims= " %%k in ('dig @%%j %%i^|find "time"') do (
               set /p=%%k     <nul>>result.txt
缺省是忽略以;开始的字符。

TOP

呵,eol的用法是忽略其后定义的字符打头的行,用 eol; 不就忽略了这些query time的行了吗?你试试看!

TOP

我用的是冒号,缺省是分好,呵呵,所以就不会忽略了。再次感谢~有机会一起探讨~,主要是向你学习,我是初学者~
c u~~~~`

TOP

咦,是啊。奇怪,eol=: 就可以了,我还得好好思考下,不用向我学习啊,我也在不断学习,一起学习吧。

TOP

返回列表