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

[网络连接] 【已解决】怎么提高代码容错性简化错误的输出

本帖最后由 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
怎么会有这样的结果??
2

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
    • pcl_test: 未按版规发帖PB -30

pcl_tes 新手 请多包涵

TOP

ping一个不存在的IP地址时,find "TTL"找不到这个关键字,导致set TTL=%%i这个变量取不到值。

TOP

加个判断试试
  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
复制代码
1

评分人数

TOP

规避 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)
复制代码
1

评分人数

TOP

回复 4# GNU


    谢谢  哈 会不会 有这样一种 情况 IP不同 但是 延迟是一样的呢 1
你怎么把惊叹号改了半分号了??

TOP

回复 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这个关键字啊
什么是半分号

TOP

回复 5# CommandBatCmd


    2个IP不一样但是延迟又一样的可能 这个时候...

TOP

回复 7# GNU


    不知道怎么
例如 ping 完ip 10 延迟 66秒 接着 ping 的IP 20 延迟 66秒 ..这样的出现会不会 只显示1个66秒呢

TOP

回复 8# ads350668398


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

TOP

回复 4# GNU


    >ms.txt type nul
这一行是不是吧空内容复制到 文件里面啊  这样做有啥用啊  去掉行不行a ??

TOP

回复 11# ads350668398


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

TOP

返回列表