标题: [网络连接] 批处理怎样求ping多个地址后的平均计算值? [打印本页]
作者: locoman 时间: 2011-2-10 16:53 标题: 批处理怎样求ping多个地址后的平均计算值?
各位高手,新年好!
我想用批处理ping几个地址后,再根据各地址的结果值,计算出本次批处理ping的平均值并最多只能保留两位小数。
如:
ping www.sina.com
ping www.online.cq.cn
ping www.163.com
结果文件保存在c:\ping.txt。并且在批处理运行开始时应该删除C盘根目录之前存在的C:\ping.txt文件,意思就是只能允许存在一个最新的C:\ping.txt。
TXT文件内容只保留所需计算结果,其他的内容均不要,如:
Lost = 90.5%------注:这里取的是Lost的平均百分比而不是平均次数
Average = 30ms
最好是批处理运行时不要出现黑窗口,就是后台运行。
谢谢各位援手!
作者: CrLf 时间: 2011-2-10 17:36
- @echo off
- %1 start /min "" %0 ::&&exit
- for %%a in (sina.com online.cq 163.com) do (
- for /f "skip=10 tokens=9 delims=ms " %%b in ('ping www.%%a') do set n=%%b
- set /a p+=1,"m=(m+n)/(p/3*2+1),y=m*100%%p"
- )
- echo>C:\ping.txt 平均 %m%.%y% ms
复制代码
[ 本帖最后由 zm900612 于 2011-2-10 17:42 编辑 ]
作者: locoman 时间: 2011-2-11 11:37
谢谢 ZM900612 朋友在节日里抽时间帮忙!!
但是,您的代码仅是完成了:平均时间的结果统计;并没有完成平均百分比的结果。
我也折腾了半天,还是由于功力不够,解决不了,希望能继续得到大家的完美帮助。
您现在的结果是:
平均 48.0 ms
而我还需要: Lost 的平均百分比:
Lost = 90.5%
Average = 48.0ms
[ 本帖最后由 locoman 于 2011-2-11 11:38 编辑 ]
作者: CrLf 时间: 2011-2-11 12:36
- @echo off
- %1 start /min "" %0 ::&&exit
- for %%a in (sina.com online.cq 163.com) do (
- set lost=
- for /f "skip=8 tokens=9 delims=ms()%% " %%b in ('ping www.%%a') do (
- if not defined lost set lost=%%b
- set n=%%b
- )
- set /a q+=lost*10,l=q/3
- set /a p+=n*10,m=p/3
- )
- (echo Lost = %l:~0,-1%.%l:~-1%%%
- echo Average = %m:~0,-1%.%m:~-1%ms)>C:\ping.txt
复制代码
[ 本帖最后由 zm900612 于 2011-2-11 12:39 编辑 ]
作者: locoman 时间: 2011-2-11 15:14
谢谢 ZM900612 朋友不愿其烦的帮助!!
这次代码的结果信息项目完整了。但是Lost结果还是有点不对头(就是结果中的那个百分比数值:小数点前面不应该是空的)。我也搞不来,还是烦请您帮到底完善一下。谢谢您,祝您兔年万事如意!!!
但愿在新的一年里,能从您们这里热心高手里一点一点捡点东西学学。
Lost = .0%
Average = 31.0ms
[ 本帖最后由 locoman 于 2011-2-11 15:17 编辑 ]
作者: CrLf 时间: 2011-2-11 15:23
bug已修正:
- @echo off&&setlocal enabledelayedexpansion
- %1 start /min "" %0 ::&&exit
- for %%a in (sina.com online.cq 163.com) do (
- set /a c+=1,test=0
- set lost=
- for /f "skip=6 tokens=10 delims=ms()%% " %%b in ('ping /w 200 www.%%a^|findstr /n .') do (
- set /a test+=1
- if not defined lost set lost=%%b
- set n=%%b
- )
- if "!test!"=="2" (
- set /a p+=n*10,m=p/c
- ) else set /a lost=100,n=0
- set /a q+=lost*10,l=q/c
- )
- if %l% leq 9 set l=0%l%
- if "%m:~0,-1%"=="" set m=0%m%
- (echo Lost = %l:~0,-1%.%l:~-1%%%
- echo Average = %m:~0,-1%.%m:~-1%ms)>C:\ping.txt
复制代码
[ 本帖最后由 zm900612 于 2011-2-11 23:00 编辑 ]
作者: locoman 时间: 2011-2-11 16:11
谢谢 ZM900612 !!!
现在输出正常了。可以结贴了。
Lost = 0.0%
Average = 20.6ms
拱手拜谢了ZM900612!
作者: locoman 时间: 2011-2-13 00:32
请给位朋友将ZM900612 朋友提供在6楼的代码在自己的机器上测试一下,看是否正常,谢谢大家,多个环境测试,也许更能考验代码的可靠性。
作者: CrLf 时间: 2011-2-13 01:41
win7没问题,英文版的ping不行,因为我把m、s作为分隔符...
但是让我郁闷的是,在xp虚拟机下测试时,这段代码:
- for /f "tokens=8,9,10,11 delims=() " %%a in ('ping localhost') do echo %%a @ %%b @ %%c @ %%d
- pause
复制代码
的运行回显是:
@ @ @
Lost @ = @ 0 @ 0%
@ @ s
请按任意键继续. . .
居然连@都掉了一个,我就纳闷了...
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |