我希望为我一直在写的批处理文件添加一些功能; 基本上发生的事情是我使用openvpn拨打VPN连接,然后继续安装网络驱动器以及许多其他东西,我想要做的是:
目前我一直在使用20秒的睡眠命令,但它不是一种非常干净或智能的方式。我想我需要某种循环来尝试无限地ping主机,直到它在继续批处理文件之前可以访问。任何帮助将不胜感激。
答案 0 :(得分:8)
来自stackoverflow上的另一个线程...信用卡支付暗黑破坏神(找到原始帖子here)
@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
这将为您提供足够的弹药来解决您的问题
答案 1 :(得分:2)
如前所述,ping
的输出依赖于语言,因此依赖Received
之类的字符串并不是一个好主意。首选且最可靠的方法是搜索字符串TTL=
:
:loop
timeout 2
ping -n 1 %ipaddress% |find "TTL=" || goto :loop
echo Answer received.
||
作为“如果上一个命令(find
)未成功,那么”
(对于timeout
:永远不构建一个没有空闲时间来减少CPU负载的循环)
答案 2 :(得分:0)
如果您翻译"已收到"使用您的语言用于单词Received的字符串(即意大利语为Ricevuti)。