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

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

[复制链接]
发表于 2016-11-9 16:24:05 | 显示全部楼层 |阅读模式
本帖最后由 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
怎么会有这样的结果??

评分

参与人数 2PB -28 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样
pcl_test -30 未按版规发帖

查看全部评分

 楼主| 发表于 2016-11-9 21:37:23 | 显示全部楼层
pcl_tes 新手 请多包涵
发表于 2016-11-10 09:08:16 | 显示全部楼层
ping一个不存在的IP地址时,find "TTL"找不到这个关键字,导致set TTL=%%i这个变量取不到值。
发表于 2016-11-10 09:15:57 | 显示全部楼层
加个判断试试
  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技术 +1 收起 理由
ads350668398 + 1 6666

查看全部评分

发表于 2016-11-10 11:02:27 | 显示全部楼层
规避 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技术 +1 收起 理由
ads350668398 + 1 66666666666

查看全部评分

 楼主| 发表于 2016-11-10 11:55:34 | 显示全部楼层
回复 4# GNU


    谢谢  哈 会不会 有这样一种 情况 IP不同 但是 延迟是一样的呢 1
你怎么把惊叹号改了半分号了??
发表于 2016-11-10 12:06:19 | 显示全部楼层
回复 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这个关键字啊
什么是半分号
 楼主| 发表于 2016-11-10 12:23:11 | 显示全部楼层
回复 5# CommandBatCmd


    2个IP不一样但是延迟又一样的可能 这个时候...
 楼主| 发表于 2016-11-10 12:31:27 | 显示全部楼层
回复 7# GNU


    不知道怎么
例如 ping 完ip 10 延迟 66秒 接着 ping 的IP 20 延迟 66秒 ..这样的出现会不会 只显示1个66秒呢
发表于 2016-11-10 19:22:16 | 显示全部楼层
回复 8# ads350668398


    这种情况在意料中,要排除重复的延迟,加一个变量储存当前的延迟,
到下一次时,与这个变量比较,相同就跳过,不同就重新给这个变量赋值。
这样循环的结果中就不存在重复的延迟值。
 楼主| 发表于 2016-11-25 12:52:27 | 显示全部楼层
回复 4# GNU


    >ms.txt type nul
这一行是不是吧空内容复制到 文件里面啊  这样做有啥用啊  去掉行不行a ??
发表于 2016-11-27 20:37:15 | 显示全部楼层
回复 11# ads350668398


作用是创建一个空文件
行不行的问题自己试试就知道啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 10:20 , Processed in 0.022572 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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