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

[网络连接] [已处理]批处理如何检测N个IP的最少PING值后计算出最小值?

本帖最后由 missll 于 2011-5-6 12:54 编辑

之前发过一个帖子询问 当时是直接检测PING值 有些不准确 所以另开帖提问,
目的: PING  N个IP输出到文本,检测平均times值最少的 然后执行拨号动作, 例如:
  1. Pinging 1.224.163.46 with 32 bytes of data:
  2. Reply from 1.224.163.46: bytes=32 time=406ms TTL=116
  3. Reply from 1.224.163.46: bytes=32 time=421ms TTL=116
  4. Reply from 1.224.163.46: bytes=32 time=405ms TTL=116
  5. Reply from 1.224.163.46: bytes=32 time=421ms TTL=116
  6. Ping statistics for 1.224.163.46:
  7.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  8. Approximate round trip times in milli-seconds:
  9.     Minimum = 405ms, Maximum = 421ms, Average = 413ms
  10. Pinging 121.78.237.45 with 32 bytes of data:
  11. Reply from 121.78.237.45: bytes=32 time=326ms TTL=114
  12. Reply from 121.78.237.45: bytes=32 time=297ms TTL=114
  13. Reply from 121.78.237.45: bytes=32 time=296ms TTL=114
  14. Reply from 121.78.237.45: bytes=32 time=327ms TTL=114
  15. Ping statistics for 121.78.237.45:
  16.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  17. Approximate round trip times in milli-seconds:
  18.     Minimum = 296ms, Maximum = 327ms, Average = 311ms
  19. Pinging 222.236.47.239 with 32 bytes of data:
  20. Reply from 222.236.47.239: bytes=32 time=383ms TTL=118
  21. Reply from 222.236.47.239: bytes=32 time=406ms TTL=118
  22. Reply from 222.236.47.239: bytes=32 time=390ms TTL=118
  23. Reply from 222.236.47.239: bytes=32 time=374ms TTL=118
  24. Ping statistics for 222.236.47.239:
  25.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  26. Approximate round trip times in milli-seconds:
  27.     Minimum = 374ms, Maximum = 406ms, Average = 388ms
复制代码
以上三个IP中 time最少的平均值是121.78.237.45,然后执行 rasdial.exe 121.78.237.45 name pass 来拨号连接。

之间的批处理是这样写的:
  1. @echo off
  2. ::--------------------------------
  3. ping 1.224.163.46 -n 1 >>%TEMP%\ip.txt
  4. ping 121.78.237.45 -n 1 >>%TEMP%\ip.txt
  5. ping 222.236.47.239 -n 1 >>%TEMP%\ip.txt
  6. ::--------------------------------
  7. if exist %TEMP%\ip.txt (for /f "tokens=1,3,8 delims=m:=<> " %%a in (%TEMP%\ip.txt) do if /i "%%a"=="Reply" echo %%b=%%c
  8. ) else (echo not found %TEMP%\ip.txt)
  9. del /q %TEMP%\ip.txt
  10. pause
复制代码
它的缺点是 只PING了一个 不能更准确的显示平均时间, 因为只在含有“Reply”中寻找 用for /f 取出IP地址来
但是如果检测平均值 含有Average 字样的行没有IP 所以我不知道怎么显示了. 并且只是显示所有的PING值 我自己看哪个最少来手动拨号的.

如何取出这些平均值后如何逐步计算 一直到找出最小的呢? 以上是PING了3个,如果更多的时候怎么写. 请指点...
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
花开不问月,不语笑红尘.

谢谢你的回复 可是看起来运行并不正常 并且我需要得到TIME的最小值后做出一个拨号的动作
哪个IP的TIME值最小 就拨哪个IP地址


@echo off
setlocal enabledelayedexpansion&cls
for /f "tokens=* usebackq delims=" %%a in ("IP_list.txt") do (
echo ping %%a ......
for /f "tokens=6 delims=        = " %%A in ('ping %%a 2^>nul^|findstr / ...
hfg1977 发表于 2011-5-5 02:19
花开不问月,不语笑红尘.

TOP

我当然试过了 运行出错。


ping 124.133.252.76 ......
此时不应有 = "。
ping 211.151.93.220 ......
此时不应有 = "。
min=  IP=



hfg1977 写的是重点啊,拨号你自己加进去就好了撒,你试试他能不能提取最小值
jsbba 发表于 2011-5-5 08:00
花开不问月,不语笑红尘.

TOP

感谢 测试可用  可以显示最小值 和IP  保存下来仔细再学习。
6# hfg1977
花开不问月,不语笑红尘.

TOP

非常感谢Hanyeguxing的回复 每次提问都能给予一个完美的答复 已保存 仔细学习。

@echo off&setlocal enableDelayedExpansion&set a=:Hanyeguxing
for /f "usebackq tokens=1-13 delims=Mm " %%X in ("输出.txt") do  (
    if /i "%%X"=="Pinging" set b=%%Y
    if /i "%%b"=="Average" if %% ...
hanyeguxing 发表于 2011-5-5 13:40
花开不问月,不语笑红尘.

TOP

感谢管理员 这篇文章我已看过 学习。

参考:批处理自动获取最快速的QQ服务器
http://bbs.bathome.net/thread-4193-1-1.html
Batcher 发表于 2011-5-5 21:42
花开不问月,不语笑红尘.

TOP

请教 hanyeguxing代码的问题
setlocal enableDelayedExpansion&set d=:Hanyeguxing
for /f "delims=" %%z in (ip.txt) do for /f "tokens=1,2,11,13 delims=Mm " %%a in ('ping %%z -n 1 -w 80') do  (
    if /i "%%a"=="Pinging" set b=%%b
    if /i "%%c"=="Average" if %%d lss !d:*:^=! set d=!b!:%%d
)
for /f "delims=:" %%a in ("%d%") do rasdial.exe %%a name pass
_____________________________________________________________
为什么开始就设置一个变量d? 看后边的代码没有理解.
  1. for /f "delims=" %%z in (ip.txt) do for /f "tokens=1,2,11,13 delims=Mm " %%a in ('ping %%z -n 1 -w 80') do  (
复制代码
这一行能明白 在ip.txt中取出IP地址来ping, (这里的-w 80延时是什么意思? 我看帮助ping /? 是timeout时间  但设置与不设置ping的结果是没有区别的.)
以 Mm空格 作为条件来截取1,2,11,13    4个节点.
  1. E:\>ping 1.224.163.46 -w 80
  2. Pinging 1.224.163.46 with 32 bytes of data:
  3. Request timed out.
  4. Reply from 1.224.163.46: bytes=32 time=296ms TTL=116
  5. Reply from 1.224.163.46: bytes=32 time=280ms TTL=116
  6. Reply from 1.224.163.46: bytes=32 time=296ms TTL=116
  7. Ping statistics for 1.224.163.46:
  8.     Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
  9. Approximate round trip times in milli-seconds:
  10.     Minimum = 280ms, Maximum = 296ms, Average = 290ms
复制代码
  1.     if /i "%%a"=="Pinging" set b=%%b
复制代码
如果%%a 等于 Pinging就把%%b的值赋给b ,也就是这一行.
Pinging 1.224.163.46 with 32 bytes of data:

但是下边一行什么意思我就没理解了.
    if /i "%%c"=="Average" if %%d lss !d:*:^=! set d=!b!:%%d
如果%%c等于Average  也就是这一行:
Minimum = 280ms, Maximum = 296ms, Average = 290ms
如果%%d (290)小于 !d:*:^=!   这里是什么意思? 没学过这个值是什么意思
还有后边set  d=    !b!:%%d
这里的!b!的哪个的值?   !b!:%%d  又是什么意思?

到最后,最开始设置的d变量似乎没用到?
花开不问月,不语笑红尘.

TOP

谢谢回复  我太笨拙了 看不明白。。。 再研究研究吧。

7楼第二个代码是根据第一个代码改的,实际可以直接@echo off&setlocal enableDelayedExpansion&set b=Hanyeguxing
for /f "usebackq delims=" %%a in ("ip列表.txt") do for /f "tokens=11,13 delims=Mm " %%b in ( ...
hanyeguxing 发表于 2011-5-6 18:14
花开不问月,不语笑红尘.

TOP

返回列表