63

バッチ ファイルを使用して VPN ダイアラ/ディスコネクタを作成しようとしましたが、行き詰まりました。いくつかの調査の結果%、パスワード内の の存在がうまく機能していないことがわかりました。

ここにコードがあります

@echo OFF
SET SWITCHPARSE1=%1
SET SWITCHPARSE2=%2
REM echo %SWITCHPARSE1%
SHIFT
SHIFT
IF "SWITCHPARSE1" == "" goto Usage
IF "SWITCHPARSE1" == "/?" goto Usage
IF "SWITCHPARSE2" == "" goto Usage
IF "SWITCHPARSE2" == "/?" goto Usage


IF "%SWITCHPARSE1%" == "sl" (
    IF "%SWITCHPARSE2%" == "conn" (
        echo "inside sl conn"
        rasdial sl employee1 K%%Pxev3=)g:{#Swc9
        goto end
    ) ELSE IF "%SWITCHPARSE2%" == "disconn" (
        rasdial sl /disconnect
        goto end
    ) ELSE (
        goto Usage
    )
) ELSE IF "%SWITCHPARSE1%" == "off" (
        IF "%SWITCHPARSE2%" == "conn" (
        rasdial Office employee1 office123
        goto end
    ) ELSE IF "%SWITCHPARSE2%" == "disconn" (
        rasdial Office /disconnect
        goto end
    ) ELSE (
        goto Usage
    )
) ELSE (
    goto Usage
)

:Usage
echo "Usage is vpnconn.bat /[sl|off] /[conn|disconn]"

:end

上記のスクリプトでは(つまり、ここからの参照)%を使用してエスケープしようとしていますが、bat スクリプトはg:{#Swc9 は現時点では予想外でした。.%%%

さらに根本的な原因を突き止めるために、別のバッチ ファイルでダブル%%(エスケープ) を試みたところ、次のように機能しました。%

@echo OFF
rasdial sl employee1 K%%Pxev3=)g:{#Swc9

異なる接続で動作するように統合されたときに同じスクリプトが機能しないのはなぜですか?

4

1 に答える 1

90

2つの%%は1つのに相当します。そうです(ただし、スクリプトでのみ、cmdで直接ではありません)、エスケープ演算子^を使用する必要はありません。

しかし、あなたは農業演算子を欠いています。それが問題です。IFは、コマンドで)を検出すると閉じます。

これを使って:

rasdial sl employee1 K%%%%Pxev3=^)g:{#Swc9
于 2012-11-25T15:58:05.513 に答える