.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.
作者: lhjoanna 时间: 2008-12-28 22:55
呵,是;; 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 编辑 ]
作者: in2bat 时间: 2008-12-28 23:02
发现问题了,呵呵,这样改也行吧
for /f "eol=: tokens=4 delims= " %%k in ('dig @%%j %%i^|find "time"') do (
set /p=%%k <nul>>result.txt
缺省是忽略以;开始的字符。
作者: lhjoanna 时间: 2008-12-28 23:09
呵,eol的用法是忽略其后定义的字符打头的行,用 eol; 不就忽略了这些query time的行了吗?你试试看!
作者: in2bat 时间: 2008-12-28 23:13
我用的是冒号,缺省是分好,呵呵,所以就不会忽略了。再次感谢~有机会一起探讨~,主要是向你学习,我是初学者~
c u~~~~`
作者: lhjoanna 时间: 2008-12-28 23:30
咦,是啊。奇怪,eol=: 就可以了,我还得好好思考下,不用向我学习啊,我也在不断学习,一起学习吧。
作者: lhjoanna 时间: 2008-12-28 23:49
唉,我也晕了。一下反应过来,eol默认是忽略;开头的行,所以只要把eol随便赋予一个不是;的值就行,所以
for /f "eol= tokens=4 delims= " %%k in ('dig @%%j %%i^|find "time"') do (
set /p=%%k <nul>>result.txt
)
只要不是;都可以。
作者: terse 时间: 2008-12-29 02:55
就你们在讨论?
下面这样行不?- @echo off&setlocal enabledelayedexpansion
- cd.>result.txt
- for /f "delims=" %%i in (dnsip.txt) do (
- if not defined str (
- set "str= %%i"&set /p=!str!<nul>result.txt)else (
- set /p= %%i<nul>>result.txt
- ))
- for /f %%i in (www.txt) do (
- echo.>>result.txt
- set "str=%%i "
- set /p=!str:~,25!<nul>>result.txt
- for /f %%j in (dnsip.txt) do (
- for /f "tokens=2 delims=:;" %%k in ('dig %%j %%i^|find "time"') do (
- set "var=%%k "
- )
- set /p=!var:~,20!<nul>>result.txt
- )
- )
- pause
复制代码
作者: in2bat 时间: 2008-12-29 09:10
楼上的是dig一次的结果,我想要的是dig 50次或者100次的平均值的结果。
作者: in2bat 时间: 2008-12-29 09:19
我感觉我们研究的方法执行速度很慢,是不是代码不够优化呢?有想法的话,可以一起探讨一下。
作者: terse 时间: 2008-12-29 10:44
原帖由 in2bat 于 2008-12-29 09:10 发表
楼上的是dig一次的结果,我想要的是dig 50次或者100次的平均值的结果。
加个for 怎么样 速度方面总要一次一次过啊
- @echo off&setlocal enabledelayedexpansion
- cd.>result.txt
- for /f "delims=" %%i in (dnsip.txt) do (
- if not defined str (
- set "str= %%i"&set /p=!str!<nul>result.txt)else (
- set /p= %%i<nul>>result.txt
- ))
- for /f %%i in (www.txt) do (
- echo.>>result.txt
- set "str=%%i "
- set /p=!str:~,25!<nul>>result.txt
- for /f %%j in (dnsip.txt) do (
- for /l %%a in (1 1 25) do (
- for /f "tokens=3 delims=:; " %%k in ('dig %%j %%i^|find "time"') do (
- set/a var+=%%k,n+=1
- )
- )
- set/a var/=n
- set "var=!var! msec "
- set /p=!var:~,20! <nul>>result.txt
- set "var="&set "n="
- )
- )
- pause
复制代码
作者: lhjoanna 时间: 2008-12-29 15:11
楼主用你自己的方法和这个方法比较下,哪个执行比较快啊。速度相差很多吗?我觉得是dig.exe本身的程序问题,每dig一次,从开始请求到答复需要一个过程,此代码每循环一次向服务器请求33次,循环50次,就上千次了。所以是很耗时间的。就好像ping一样,原本是用来检测网络连接,但每发送一次消息到接受一次消息是有时间差的,所以可以用ping -n X 127.1>nul来延时,类似的,也可以用dig 1.1.1.1 www.baidu.com>nul来延时。
作者: in2bat 时间: 2009-1-5 21:28
感谢各位的热心帮助~从这里面也学到了不少知识,我最终使用批处理如下:
@echo off&setlocal enabledelayedexpansion
cd.>result.txt
for /f "delims=" %%i in (dnsip.txt) do (
if not defined str (
set "str= %%i"&set /p=!str!<nul>result.txt)else (
set /p= %%i<nul>>result.txt
))
for /f %%i in (www.txt) do (
echo.>>result.txt
set "str=%%i "
set /p=!str:~,25!<nul>>result.txt
for /f %%j in (dnsip.txt) do (
for /l %%a in (1 1 50) do (
for /f "tokens=3 delims=:; " %%k in ('dig @%%j %%i^|find "time"') do (
echo 正在执行 %%j的第 %%a 次 %%k msec %%i
set/a var+=%%k,n+=1
)
)
set/a var/=n
set "var=!var! msec "
set /p=!var:~,20! <nul>>result.txt
set "var="&set "n="
)
)
pause
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |