Board logo

标题: [网络连接] 【已解决】请教完善批处理根据PING的结果判断是否报警? [打印本页]

作者: bobgjs    时间: 2009-3-18 10:15     标题: 【已解决】请教完善批处理根据PING的结果判断是否报警?

  1. @echo off
  2. :loop0
  3. ping -n 2 www.163.com|findstr /i /c:"Request timed out"
  4. if %errorlevel%==0 (set /a count+=1&goto loop1)
  5. goto loop0
  6. :loop1
  7. echo 
  8. goto loop0
复制代码
以上部份是拼不通的时候叫五声,我想如何能判断拼的延时大时报警。比如:
Reply from 192.168.0.1: bytes=32 time=1ms TTL=128
如果time等于或大于100ms则报警,该代码应如何更改呢?
全天在线等待帮助。

[ 本帖最后由 bobgjs 于 2009-3-20 13:11 编辑 ]
作者: qq362220083    时间: 2009-3-18 14:56

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set ipadd=192.168.80.0
  4. :goon
  5. :::::::::::::::::::::::::::获取回显的响应时间,类似于 time=123ms::::::::::::::::::::::::::::::
  6. for /f "skip=3 tokens=5" %%a in ('ping.exe %ipadd% -n 1 ^|findstr /i /c:"Reply from"') do (
  7. set t=%%a
  8. goto :test
  9. )
  10. :::::::::::::::::::::::::::::若上述for条件为否,视为不通,跳转到报警1,否则跳转到test,分析响应时间::::::::::::::::::::
  11. goto :报警1
  12. ::::::::::::::::::::::::::::下面的第一句,忽略掉time=123ms 的前5个字符,剩下123ms
  13. ::::::::::::::::::::::::::::第二句,替换ms为空,这样就剩下响应时间了
  14. ::::::::::::::::::::::::::::判断响应时间是否大于等于2(为了测试方便,调的比较小,而且IP是非法IP,呵呵),成立,跳转到报警2
  15. ::::::::::::::::::::::::::::若不成立,跳转到goon小节运行
  16. :test
  17. set t=!t:~5!
  18. set t=!t:ms=!
  19. if !t! GEQ 2 (goto :报警2)
  20. :::::::::::::::::::::::::::::::::::::::::::此处已更新!     09-3-20 0时1分
  21. goto :goon
  22. :报警1
  23. echo.网络不通哦,是不是该Ping 127.1 呢?
  24. pause>nul
  25. goto :goon
  26. :报警2
  27. echo.叫吧,使劲地叫唤!
  28. pause>nul
  29. goto :goon
复制代码
若要检测响应时间,你的就需要大改了,至少使用for /f捕获结果,然后过滤结果中无关字符,留下响应时间。

[ 本帖最后由 qq362220083 于 2009-3-20 00:02 编辑 ]
作者: bobgjs    时间: 2009-3-18 15:33

若要检测响应时间,你的就需要大改了,至少使用for /f捕获结果,然后过滤结果中无关字符,留下响应时间。

谢谢楼上兄台帮助,就我那几行便可报警了。
小的只是希望能够解决“延时等于或大于100ms时报警”,继续期待中……
作者: Batcher    时间: 2009-3-18 15:52     标题: 回复 3楼 的帖子

2楼不是给代码了么,你还在期待什么?
作者: bobgjs    时间: 2009-3-18 16:18

我是菜刀,如果不嫌麻烦,请帮我解释一下。此代码在PING某一IP时,延时达到100MS以上就报警,在哪里体现?
作者: Batcher    时间: 2009-3-18 16:20     标题: 回复 5楼 的帖子

if !t! GEQ 2 (goto :报警1)
把2改成100不行么?
作者: bobgjs    时间: 2009-3-18 17:45

感谢!
真诚的感谢!
谢谢你给予我的帮助,希望这个问题也帮助了其他的朋友。
再次感谢热心的qq362220083与Batcher。
作者: bobgjs    时间: 2009-3-18 17:57

只是执行的结果永远都是
(goto :报警1)
我再看看吧
作者: qq362220083    时间: 2009-3-18 19:22

若你没有修改IP地址,那么结果就是永远报警1

因为在开头定义的IP地址是192.168.80.0,这个IP并不是合法的IP,当然永远也不会通的。呵呵,根据你自身的需要,修改开头定义的 set ipadd=需要测试的IP地址或域名
然后修改超时时间,我测试的是2,你可以根据你的要求,修改为100
作者: bobgjs    时间: 2009-3-19 09:40

原帖由 qq362220083 于 2009-3-18 19:22 发表
若你没有修改IP地址,那么结果就是永远报警1

因为在开头定义的IP地址是192.168.80.0,这个IP并不是合法的IP,当然永远也不会通的。呵呵,根据你自身的需要,修改开头定义的 set ipadd=需要测试的IP地址或域名
然 ...

我已将它改为:
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set ipadd=61.135.253.9
  4. :goon
  5. for /f "skip=3 tokens=5" %%a in ('ping.exe %ipadd% -n 1 ^|findstr /i /c:"Reply from"') do (
  6. set t=%%a
  7. goto :test
  8. )
  9. goto :报警1
  10. :test
  11. set t=!t:~5!
  12. set t=!t:ms=!
  13. if !t! GEQ 50 (goto :报警1)
  14. goto :goon
  15. :报警1
  16. echo 
  17. pause
  18. goto :goon
  19. :报警2
  20. echo 
  21. echo 
  22. pause
  23. goto :goon
复制代码
但真的不行,如果去掉pause,它就真的是叫个不停了。
作者: qq362220083    时间: 2009-3-20 00:00     标题: 回复 10楼 的帖子

Sorry,一时手误,把
  1. :test
  2. set t=!t:~5!
  3. set t=!t:ms=!
  4. if !t! GEQ 50 (goto :报警2)
  5. goto :goon
复制代码
的跳转打成 报警1 了,对此确实是我的失误,给大家带来不便请谅解,我马上更新

[ 本帖最后由 qq362220083 于 2009-3-20 00:19 编辑 ]
作者: bobgjs    时间: 2009-3-20 10:57

qq362220083 谢谢你那么晚了还在帮助我,我把IP改成127.0.0.1也不成,仍然是“报警1”
作者: bobgjs    时间: 2009-3-20 11:54

终于,我想了另一种方式把它解决了。
感谢大家的帮助,也希望能帮助上其他的朋友。
  1. @echo off
  2. :000
  3. for /f "tokens=4 delims==" %%a in ('ping -n 2 www.163.com') do (
  4. set time=%%a
  5. )
  6. set time=%time:~1,-3%
  7. echo %time%
  8. if %time% GEQ 20 (goto pl)
  9. goto 000
  10. )
  11. :pl
  12. echo 
  13. goto 000
复制代码

作者: Batcher    时间: 2009-3-20 12:56

建议:
1、使用代码缩进
2、使用有意义的标签名称
3、给goto后的标签加上冒号
4、不要使用与系统变量同名的自定义变量
  1. @echo off
  2. :LoopPing
  3. for /f "tokens=4 delims==" %%a in ('ping -n 2 www.163.com') do (
  4.   set ReplyTime=%%a
  5. )
  6. set ReplyTime=%ReplyTime:~1,-3%
  7. echo %ReplyTime%
  8. if %ReplyTime% GEQ 20 (
  9.   goto :Alert
  10. ) else(
  11.   goto :LoopPing
  12. )
  13. :Alert
  14. echo 
  15. goto :LoopPing
复制代码

作者: tieyiren    时间: 2013-5-13 23:32

这个学习了,记号
作者: pict    时间: 2013-6-12 23:08

为什么我复制代码到记事本里面,:报警1
echo 
pause
goto :goon
作者: pict    时间: 2013-6-12 23:10

为什么我复制代码到记事本里面
***************1
echo 
pause
goto :goon

:报警2
echo 
echo 
**************
在每个echo后面都有几个方框是什么情况,怎么打上去




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2