2

我正在寻找向我一直在编写的批处理文件添加一些功能;基本上发生的事情是我使用 openvpn 拨打 VPN 连接,然后继续安装网络驱动器以及许多其他事情,我想做的是:

  • 通过 OpenVPN 拨打连接(我工作正常)
  • ping VPN 另一端的主机,在可以访问该主机之前不要继续处理批处理文件。

目前我一直在使用 20 秒的睡眠命令,它有效,但不是一种非常干净或智能的方式;我想我需要某种循环来尝试无限地ping主机,直到它可以访问,然后再继续批处理文件。任何帮助将不胜感激。

4

3 回答 3

9

来自stackoverflow上的antoher线程......归功于paxdiablo(在此处找到原始帖子)

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
:loop
set state=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr!') do (
    if "x%%a"=="xReceived" if "x%%b"=="x1," set state=up
)
echo.Link is !state!
ping -n 6 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal

这将为您提供足够的弹药来使用和解决您的问题

于 2013-02-01T01:00:31.280 回答
3

正如几年前已经提到的,输出ping是依赖于语言的,所以依赖像Received. 首选和最可靠的方法是搜索字符串TTL=

:loop
timeout 2
ping -n 1 %ipaddress% |find "TTL=" || goto :loop
echo Answer received.

||就像“如果之前的命令 ( find) 不成功,那么”

(至于timeout:永远不要在没有空闲时间的情况下构建循环以减少 CPU 负载)

于 2017-08-11T08:08:40.900 回答
0

如果您使用您的语言用于单词 Received 的字符串翻译“Received”字符串,它会起作用(即意大利语是 Ricevuti)。

于 2017-08-11T07:54:28.983 回答