2

私が書いているバッチファイルにいくつかの機能を追加したいと思っています。基本的に何が起こるかというと、openvpnを使用してVPN接続をダイヤルアップしてから、ネットワークドライブやその他の多くのことをマウントし続けます。私が探しているのは、次のとおりです。

  • OpenVPN経由で接続をダイヤルします(私はうまく機能しています)
  • VPNの反対側にあるホストにpingを実行し、このホストに到達できるまでバッチファイルを続行しないでください。

現在、私は20秒のスリープコマンドを使用していますが、これは機能しますが、それを実行するための非常にクリーンでインテリジェントな方法ではありません。バッチファイルで続行する前に、ホストが到達可能になるまで無限にpingを試行するには、ある種のループが必要だと思います。どんな助けでも大歓迎です。

4

3 に答える 3

9

stackoverflowの別のスレッドから...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 に答える