找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32433|回复: 14

[网络连接] 批处理如何获取ping命令的响应时间并做判断?

[复制链接]
发表于 2016-1-21 22:10:52 | 显示全部楼层 |阅读模式
来自 14.17.42.40 的回复: 字节=32 时间=725ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=142ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=217ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=371ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=175ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=27ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=35ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=76ms TTL=53
我想获取其中的time 时间的数值,如果数值大于100了就跳转,如果数值没有大于100就一直循环的判断 ,直到超过100跳转!
求大神如何写。
发表于 2016-1-21 22:57:34 | 显示全部楼层
  1. :loop

  2. for /f "tokens=3 delims==m" %%a in ('ping 14.17.42.40^|find "TTL"') do if %%a gtr 100 goto :break

  3. goto :loop

  4. :break
复制代码
发表于 2016-1-21 23:03:25 | 显示全部楼层
回复 1# cowards
  1. @echo off
  2. for /f "delims=" %%i in ('ping.exe "114.114.114.114"^|find/i "ttl="')do (
  3. for %%j in (%%i)do if /i not "%%j"=="ttl" (set "_time_ms=%%j"
  4. )else (
  5.   call set "_time_ms_new=%%_time_ms:ms=%%"
  6.   for /f "delims=" %%k in ('call echo,%%_time_ms_new%%')do (
  7.    echo,原始值:%%i
  8.    echo,提取的值:%%k
  9.   )
  10. )
  11. )
  12. pause
复制代码
 楼主| 发表于 2016-1-21 23:04:39 | 显示全部楼层
回复 2# aa77dd@163.com


ping中的time值 没有到100 循环了一段时间 会停。。
 楼主| 发表于 2016-1-21 23:09:04 | 显示全部楼层
回复 3# /zhqsystem/zhq


    只能获取ttl吗?不能获取time吗 ?  time值变大了,ttl值 变化不大啊。。

就是正常PING www.qq.com 然后用迅雷之类的下载软件满速下载time值就会变大,然后就需要跳转。。。 但是ttl值没怎么变化。
 楼主| 发表于 2016-1-21 23:10:28 | 显示全部楼层
正在 Ping 14.17.42.40 具有 32 字节的数据:
来自 14.17.42.40 的回复: 字节=32 时间=22ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=23ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=25ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=33ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=25ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=38ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=189ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=81ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=236ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=192ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=187ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=136ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=179ms TTL=53
来自 14.17.42.40 的回复: 字节=32 时间=194ms TTL=53
tll值。。没变过。但是time值变大了。。。

楼上二位大神,能不能判断下time值?
发表于 2016-1-21 23:15:38 | 显示全部楼层
回复 6# cowards
ttl只是排除无用的行实体数据获取到的就是时间=值ms,理论上支持英文语言,直接搜索时间遇到英文系统不会出现"时间"这两个字
发表于 2016-1-21 23:16:58 | 显示全部楼层
回复 1# cowards
  1. @echo off
  2. echo ping获取time时间数值。如果小于100就一直循环判断,大于100就goto跳转
  3. echo 例如:来自 14.17.42.40 的回复: 字节=32 时间=76ms TTL=53

  4. for /f "tokens=2,4,6 delims==, " %%a in ('ping www.sohu.com -n 10 ^|find "平均"') do echo.最短延迟:%%a 最长延迟:%%b 平均延迟:%%c && pause


  5. :loop

  6. for /f "delims=" %%i in ('ping.exe "www.baidu.com"^|find/i "ttl="')do (
  7. for %%j in (%%i)do if /i not "%%j"=="ttl" (set "_time_ms=%%j"
  8. )else (
  9.   call set "_time_ms_new=%%_time_ms:ms=%%"
  10.   for /f "delims=" %%k in ('call echo,%%_time_ms_new%%')do (
  11.    echo,原始值:%%i
  12.    echo,提取的值:%%k
  13. if %%k gtr 100 goto :break
  14. goto :loop

  15.   )
  16. )
  17. )

  18. :break
  19. pause
复制代码
 楼主| 发表于 2016-1-21 23:20:36 | 显示全部楼层
谢谢两位大神。
/zhqsystem/zhq  大神的方法已经够我实现我想要的了。谢谢!
 楼主| 发表于 2016-1-22 12:49:46 | 显示全部楼层
...........大神求助啊 ..昨天win 7测试没问题了.但是在 win 2003测试..判断time..或者ttl 正常也跳转,..
 楼主| 发表于 2016-1-22 12:50:06 | 显示全部楼层
回复 2# aa77dd@163.com


    ..........大神求助啊 ..昨天win 7测试没问题了.但是在 win 2003测试..判断time..或者ttl 正常也跳转,..
 楼主| 发表于 2016-1-22 13:00:39 | 显示全部楼层
  1. :loop
  2. for /f "tokens=3 delims==m" %%a in ('ping www.qq.com^|find "TTL"') do if %%a gtr 200 goto break
  3. goto loop
  4. :break
  5. pause
  6. goto loop
复制代码
这样就算 ttl 大于200也不会跳转
  1. :loop
  2. for /f "tokens=3 delims==m" %%a in ('ping www.qq.com^|find "time"') do if %%a gtr 200 goto break
  3. goto loop
  4. :break
  5. pause
复制代码
这样..不大于200 还是会直接跳转到break ......
 楼主| 发表于 2016-1-22 13:28:17 | 显示全部楼层
大神在哪里5555555555555
发表于 2016-1-22 14:19:30 | 显示全部楼层
回复 13# cowards

代码就是按你在顶楼所说,  解析出的时间以毫秒为单位的数值,  你不懂却瞎改,  还胡乱以为,  这个代码是看不到 ping 的原始输出的,  而只对其输出的毫秒数值进行提取和判断, 最后在满足条件时, 跳出循环
  1. prompt $h
  2. @echo on

  3. :loop

  4. for /f "tokens=3 delims==m" %%a in ('ping 14.17.42.40^|find "TTL"') do if %%a gtr 100 goto :break

  5. goto :loop

  6. :break

  7. pause
复制代码
 楼主| 发表于 2016-1-30 16:12:10 | 显示全部楼层
谢谢!!!!!!!!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:43 , Processed in 0.021443 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表