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

[网络连接] 批处理怎样求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

最好是批处理运行时不要出现黑窗口,就是后台运行。

谢谢各位援手!

  1. @echo off
  2. %1 start /min "" %0 ::&&exit
  3. for %%a in (sina.com online.cq 163.com) do (
  4. for /f "skip=10 tokens=9 delims=ms " %%b in ('ping www.%%a') do set n=%%b
  5. set /a p+=1,"m=(m+n)/(p/3*2+1),y=m*100%%p"
  6. )
  7. echo>C:\ping.txt 平均 %m%.%y% ms
复制代码

[ 本帖最后由 zm900612 于 2011-2-10 17:42 编辑 ]

TOP

谢谢 ZM900612 朋友在节日里抽时间帮忙!!

但是,您的代码仅是完成了:平均时间的结果统计;并没有完成平均百分比的结果。
我也折腾了半天,还是由于功力不够,解决不了,希望能继续得到大家的完美帮助。

您现在的结果是:
平均 48.0 ms

而我还需要: Lost 的平均百分比:
Lost = 90.5%
Average = 48.0ms

[ 本帖最后由 locoman 于 2011-2-11 11:38 编辑 ]

TOP

  1. @echo off
  2. %1 start /min "" %0 ::&&exit
  3. for %%a in (sina.com online.cq 163.com) do (
  4.     set lost=
  5.     for /f "skip=8 tokens=9 delims=ms()%% " %%b in ('ping www.%%a') do (
  6.         if not defined lost set lost=%%b
  7.         set n=%%b
  8.     )
  9.     set /a q+=lost*10,l=q/3
  10.     set /a p+=n*10,m=p/3
  11. )
  12. (echo Lost = %l:~0,-1%.%l:~-1%%%
  13. echo Average = %m:~0,-1%.%m:~-1%ms)>C:\ping.txt
复制代码

[ 本帖最后由 zm900612 于 2011-2-11 12:39 编辑 ]

TOP

谢谢 ZM900612 朋友不愿其烦的帮助!!
这次代码的结果信息项目完整了。但是Lost结果还是有点不对头(就是结果中的那个百分比数值:小数点前面不应该是空的)。我也搞不来,还是烦请您帮到底完善一下。谢谢您,祝您兔年万事如意!!!
但愿在新的一年里,能从您们这里热心高手里一点一点捡点东西学学。

Lost = .0%
Average = 31.0ms


[ 本帖最后由 locoman 于 2011-2-11 15:17 编辑 ]

TOP

bug已修正:
  1. @echo off&&setlocal enabledelayedexpansion
  2. %1 start /min "" %0 ::&&exit
  3. for %%a in (sina.com online.cq 163.com) do (
  4.     set /a c+=1,test=0
  5.     set lost=
  6.     for /f "skip=6 tokens=10 delims=ms()%% " %%b in ('ping /w 200 www.%%a^|findstr /n .') do (
  7.         set /a test+=1
  8.         if not defined lost set lost=%%b
  9.         set n=%%b
  10.     )
  11.     if "!test!"=="2" (
  12.         set /a p+=n*10,m=p/c
  13.     ) else set /a lost=100,n=0
  14.     set /a q+=lost*10,l=q/c
  15. )
  16. if %l% leq 9 set l=0%l%
  17. if "%m:~0,-1%"=="" set m=0%m%
  18. (echo Lost = %l:~0,-1%.%l:~-1%%%
  19. echo Average = %m:~0,-1%.%m:~-1%ms)>C:\ping.txt
复制代码

[ 本帖最后由 zm900612 于 2011-2-11 23:00 编辑 ]
1

评分人数

TOP

谢谢 ZM900612 !!!

现在输出正常了。可以结贴了。
Lost = 0.0%
Average = 20.6ms

拱手拜谢了ZM900612!

TOP

请给位朋友将ZM900612 朋友提供在6楼的代码在自己的机器上测试一下,看是否正常,谢谢大家,多个环境测试,也许更能考验代码的可靠性。

TOP

win7没问题,英文版的ping不行,因为我把m、s作为分隔符...
但是让我郁闷的是,在xp虚拟机下测试时,这段代码:
  1. for /f "tokens=8,9,10,11 delims=() " %%a in ('ping localhost') do echo %%a @ %%b @ %%c @ %%d
  2. pause
复制代码

的运行回显是:
@  @  @
Lost @ = @ 0 @ 0%
@  @ s
请按任意键继续. . .

居然连@都掉了一个,我就纳闷了...

TOP

返回列表