批处理 ping命令判断是否可以连接到一个网站

问题描述

使用讯飞语音合成服务需要联网,但是,有时候网络断掉了.我并不知道,程序中也没有提醒.等到我发现合成的不对的时候,再检查网络,已经浪费了一段时间.
所以程序应该先判断一下是否能联网,如果能联网再调用SDK合成语音,如果不能联网则及时给出提示.

判断当前是否可以联网的批处理

xunfei.bat:

1
2
3
4
5
6
7
8
9
@echo off
ping www.xfyun.cn > nul
if %errorlevel% leq 0 (
echo 可以连接到www.xfyun.cn,网络链接正常.
pause
) else (
echo 无法连接到www.xfyun.cn,请求检查网络是否连接正常.
pause
)

这里先执行ping命令,并根据ping命令返回的errorlevel来判断是否可以连通,如果可以连接上,errorlevel应该为0
可以联网时输出:

1
2
可以连接到www.xfyun.cn,网络链接正常.
请按任意键继续. . .

无法联网时输出:

1
2
无法连接到www.xfyun.cn,请求检查网络是否连接正常.
请按任意键继续. . .

应用到程序中

安装程序

install.bat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
echo ############ 生成启动程序 xunfei.bat...
::覆盖写入
echo @echo off>xunfei.bat
echo ::切换盘符>>xunfei.bat
echo %~d0>>xunfei.bat
echo :: 进入文件所在路径>>xunfei.bat
echo cd %~dp0>>xunfei.bat
echo :: 判断是否可以联网,为了节省时间,只发送回显请求1次>>xunfei.bat
echo ping www.xfyun.cn -n 1 ^> nul>>xunfei.bat
echo :: 如果可以联网则执行程序>>xunfei.bat
echo if %%errorlevel%% leq 0 (>>xunfei.bat
echo echo 网络链接正常.>>xunfei.bat
echo java -jar "%thispath%\xunfei.jar">>xunfei.bat
echo ) else (>>xunfei.bat
echo :: 如果不可以联网则给出提示>>xunfei.bat
echo echo 无法连接到www.xfyun.cn,请求检查网络是否连接正常.>>xunfei.bat
echo pause>>xunfei.bat
echo exit>>xunfei.bat
echo )>>xunfei.bat
:: ################# 创建启动程序 结束

执行程序

运行安装程序install.bat生成的xunfei.bat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
::切换盘符
E:
:: 进入文件所在路径
cd E:\workspace\XunFeiTTS\runable\
:: 判断是否可以联网,为了节省时间,只发送回显请求1次
ping www.xfyun.cn -n 1 > nul
:: 如果可以联网则执行程序
if %errorlevel% leq 0 (
echo 网络链接正常.
java -jar "E:\workspace\XunFeiTTS\runable\xunfei.jar"
) else (
:: 如果不可以联网则给出提示
echo 无法连接到www.xfyun.cn,请求检查网络是否连接正常.
pause
exit
)

运行结果

xunfei.bat运行结果如下:

网络连接正常

1
2
3
网络链接正常.
####################################### 讯飞语音合成系统
输入要合成的文字(以: "#"作为结束符):

网络不通时

1
2
无法连接到www.xfyun.cn,请求检查网络是否连接正常.
请按任意键继续. . .

ping命令发送一次请求

正常的ping命令会回显4次,如下所示:

1
2
3
4
5
6
7
8
9
10
G:\Desktop\书籍\批处理\bat>ping www.xfyun.cn
正在 Ping www.xfyun.cn [42.62.43.138] 具有 32 字节的数据:
来自 42.62.43.138 的回复: 字节=32 时间=66ms TTL=237
来自 42.62.43.138 的回复: 字节=32 时间=146ms TTL=237
来自 42.62.43.138 的回复: 字节=32 时间=136ms TTL=237
来自 42.62.43.138 的回复: 字节=32 时间=126ms TTL=237
42.62.43.138 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 66ms,最长 = 146ms,平均 = 118ms

为了节省时间,我这里只发送一次请求:

1
2
3
4
5
6
7
G:\Desktop\书籍\批处理\bat>ping www.xfyun.cn -n 1
正在 Ping www.xfyun.cn [42.62.43.138] 具有 32 字节的数据:
来自 42.62.43.138 的回复: 字节=32 时间=57ms TTL=237
42.62.43.138 的 Ping 统计信息:
数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 57ms,最长 = 57ms,平均 = 57ms

这样等待时间可以忽略,毕竟等待默认的ping命令执行完毕还是挺难熬的。