Board logo

标题: [网络连接] 【已解决】怎么提高代码容错性简化错误的输出 [打印本页]

作者: ads350668398    时间: 2016-11-9 16:24     标题: 【已解决】怎么提高代码容错性简化错误的输出

本帖最后由 ads350668398 于 2016-11-12 09:47 编辑
  1. echo &setlocal enabledelayedexpansion
  2. :a
  3. setlocal enabledelayedexpansion
  4. @ping /n 1 127.0.0.1>nul
  5. for /f "tokens=3 delims==" %%i in ('ping %random:~1,2%.%random:~1,2%.%random:~1,2%.%random:~1,2% -n 2 -l 888^|find "TTL"') do (set TTL=%%i)
  6. @ping /n 1 127.0.0.1>nul
  7. set ms=%ttl:~0,-6%
  8. @ping /n 1 127.0.0.1>nul
  9. echo %ms% >>ms.txt
复制代码
输出:
~0,-6
~0,-6
~0,-6
~0,-6
557
557
557
557
557
79
79
79
79
79
39
39
39
39
39
怎么会有这样的结果??
作者: ads350668398    时间: 2016-11-9 21:37

pcl_tes 新手 请多包涵
作者: GNU    时间: 2016-11-10 09:08

ping一个不存在的IP地址时,find "TTL"找不到这个关键字,导致set TTL=%%i这个变量取不到值。
作者: GNU    时间: 2016-11-10 09:15

加个判断试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >ms.txt type nul
  4. :loop
  5. set "TTL=null"
  6. ping /n 1 127.0.0.1 >nul
  7. for /f "tokens=3 delims==" %%i in ('ping !random:~1,2!.!random:~1,2!.!random:~1,2!.!random:~1,2! -n 2 -l 888 ^| find "TTL"') do (
  8.     set TTL=%%i
  9. )
  10. if "!TTL!" equ "null" (
  11.     goto :loop
  12. )
  13. ping /n 1 127.0.0.1 >nul
  14. set ms=!TTL:~0,-6!
  15. ping /n 1 127.0.0.1 >nul
  16. >>ms.txt echo,!ms!
  17. goto :loop
复制代码

作者: CommandBatCmd    时间: 2016-11-10 11:02

规避 time<1ms 的情况:
  1. @echo off&setlocal enabledelayedexpansion
  2. :a
  3. set ip=!random:~1,2!.!random:~1,2!.!random:~1,2!.!random:~1,2!
  4. (for /f "eol=  tokens=3 delims==<" %%i in ('ping %ip% -n 2 -l 888') do (
  5.     set "ms=%%i"&set /p"=!ms:~0,-6!"<nul>>ms.txt&echo;>>ms.txt&goto :a
  6.     )
  7. )||(ping 127.0.0.1 -n 1 >nul 2>nul&goto :a)
复制代码
测试
  1. @echo off&Title 测试&setlocal enabledelayedexpansion
  2. :a
  3. set ip=!random:~1,2!.!random:~1,2!.!random:~1,2!.!random:~1,2!
  4. (for /f "eol=  tokens=3 delims==<" %%i in ('ping %ip% -n 2 -l 888') do (
  5.     set "ms=%%i"&set /p"=!ms:~0,-6! %ip%"<nul>>ms.txt&echo;>>ms.txt
  6.     set /a b+=1&Title %ip%  !b!个地址&goto :a
  7.     )
  8. )||(set /a a+=1&Title %ip%  !a!个失效&ping 127.0.0.1 -n 1 >nul 2>nul&goto :a)
复制代码

作者: ads350668398    时间: 2016-11-10 11:55

回复 4# GNU


    谢谢  哈 会不会 有这样一种 情况 IP不同 但是 延迟是一样的呢 1
你怎么把惊叹号改了半分号了??
作者: GNU    时间: 2016-11-10 12:06

回复 6# ads350668398


C:\>ping 300.300.300.300
Ping request could not find host 300.300.300.300. Please check the name and try again.

IP不通的情况下根本没有TTL这个关键字啊
什么是半分号
作者: ads350668398    时间: 2016-11-10 12:23

回复 5# CommandBatCmd


    2个IP不一样但是延迟又一样的可能 这个时候...
作者: ads350668398    时间: 2016-11-10 12:31

回复 7# GNU


    不知道怎么
例如 ping 完ip 10 延迟 66秒 接着 ping 的IP 20 延迟 66秒 ..这样的出现会不会 只显示1个66秒呢
作者: CommandBatCmd    时间: 2016-11-10 19:22

回复 8# ads350668398


    这种情况在意料中,要排除重复的延迟,加一个变量储存当前的延迟,
到下一次时,与这个变量比较,相同就跳过,不同就重新给这个变量赋值。
这样循环的结果中就不存在重复的延迟值。
作者: ads350668398    时间: 2016-11-25 12:52

回复 4# GNU


    >ms.txt type nul
这一行是不是吧空内容复制到 文件里面啊  这样做有啥用啊  去掉行不行a ??
作者: GNU    时间: 2016-11-27 20:37

回复 11# ads350668398


作用是创建一个空文件
行不行的问题自己试试就知道啦




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