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

[网络连接] 批处理如何获取ping命令返回结果中的byte参数值?

环境:两块网卡eth(接公司内网,网段为10)和wifi(接互联网,网段为172),两块网卡均为dhcp自动获得IP
场景:正常情况下,两块网卡工作正常。现在的情况是wifi不稳定,需要定时将网卡禁用一下,再启用,然后就一切正常了。
需求:ping 一个外网的地址,从bytes字段中获得一个值,判断是否大于0,以此来确定互联网连接是否正常。
        如果正常,则直接退出,如果不正常,则将wifi网卡禁用之后再启用,然后再退出。

我写的脚本如下:
::关闭回显
@ echo on

::ping open dns
ping -n 2 -l 1 208.67.222.222


::从ping命令的执行结果中,获取byte字符串值并比对是否大于0
代码不会写了,请高人指点

::如果大于0直接退出,如果为非O值,则执行网卡禁用启用操作。
netsh interface set interface "WiFi" disabled
netsh interface set interface "WiFi" enabled

::退出
exit

本帖最后由 Bearxy 于 2012-9-12 00:07 编辑
  1. @echo off
  2. set ip=127.0.1
  3. rem 需要ping的ip
  4. ping %ip%|findstr "bytes=32"&&exit||goto No
  5. rem ping 127.0.1如果找到"bytes=32"则退出,没有找到则跳转到:No
  6. :No
  7. netsh interface set interface "WiFi" disabled
  8. netsh interface set interface "WiFi" enabled
  9. pause
复制代码
貌似不管PING什么字节都是32吧?所以只需要判断是否等于32就可以了, WIN7测试通过

TOP

不是,如果不带“-l 数字”这部份的话,默认是32字节
-l参数是包的长度,
带上-l的参数,可以防止对端的安全设备因为包过长而误判为是洪水攻击,我一般都只发一个字节的包过去。

非常感谢,我改一下,马上测试。

TOP

本帖最后由 Bearxy 于 2012-9-12 12:51 编辑

回复 3# iplute
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=5 delims== " %%a in ('ping/n 2 -l 1 127.0.1^|findstr "字节=1" ') do (
  4. set str=%%a
  5. echo.字节为:!str!
  6. if "!str!" gtr "0" (echo.网络正常,2秒后退出...&ping/n 3 127.0.1>nul&&exit
  7. ) else (
  8.   goto :Nok
  9. ))
  10. :Nok
  11. echo.网络不通,运行命令
  12. netsh interface set interface "WiFi" disabled
  13. netsh interface set interface "WiFi" enabled
  14. pause
复制代码
如果字节大于0,则2秒后退出,反之则运行标签:NOK
因为我这边是WIN7系统,所以PING出来的结果是中文,你自己修改一下就好了

TOP

返回列表