标题: [网络连接] 批处理如何获取ping命令返回结果中的byte参数值? [打印本页]
作者: iplute 时间: 2012-9-11 17:38 标题: 批处理如何获取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-11 23:52
本帖最后由 Bearxy 于 2012-9-12 00:07 编辑
- @echo off
- set ip=127.0.1
- rem 需要ping的ip
- ping %ip%|findstr "bytes=32"&&exit||goto No
- rem ping 127.0.1如果找到"bytes=32"则退出,没有找到则跳转到:No
-
- :No
- netsh interface set interface "WiFi" disabled
- netsh interface set interface "WiFi" enabled
- pause
复制代码
貌似不管PING什么字节都是32吧?所以只需要判断是否等于32就可以了, WIN7测试通过
作者: iplute 时间: 2012-9-12 11:03
不是,如果不带“-l 数字”这部份的话,默认是32字节
-l参数是包的长度,
带上-l的参数,可以防止对端的安全设备因为包过长而误判为是洪水攻击,我一般都只发一个字节的包过去。
非常感谢,我改一下,马上测试。
作者: Bearxy 时间: 2012-9-12 12:15
本帖最后由 Bearxy 于 2012-9-12 12:51 编辑
回复 3# iplute - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=5 delims== " %%a in ('ping/n 2 -l 1 127.0.1^|findstr "字节=1" ') do (
- set str=%%a
- echo.字节为:!str!
- if "!str!" gtr "0" (echo.网络正常,2秒后退出...&ping/n 3 127.0.1>nul&&exit
- ) else (
- goto :Nok
- ))
-
-
- :Nok
- echo.网络不通,运行命令
- netsh interface set interface "WiFi" disabled
- netsh interface set interface "WiFi" enabled
- pause
复制代码
如果字节大于0,则2秒后退出,反之则运行标签:NOK
因为我这边是WIN7系统,所以PING出来的结果是中文,你自己修改一下就好了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |