Процент побега в файле bat

Я пытался написать vpn dialer/disconnector, используя командный файл, но застрял. После некоторого расследования выяснилось, что наличие% в пароле плохо работает.

Вот код

@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

В приведенном выше script я пытаюсь избежать% используя% (т.е. %%, ссылку из здесь), но bat script дает g: {# Swc9 был неожиданным в настоящее время..

Чтобы корень стал причиной, я попробовал удвоить %% (escape%) в другом командном файле и работал

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

Интересно, почему тот же script, когда он интегрирован для работы с разными соединениями, не работает...

Любая помощь?

Ответ 1

Два %% равны одному %, это право (но только в script, а не непосредственно в cmd), не нужно использовать оператор scape ^.

Но вам не хватает оператора agrupation ), что проблема, IF закрывается, когда находит ) по вашей команде.

Используйте это:

rasdial sl employee1 K%%%%Pxev3=^)g:{#Swc9

Надеюсь, это помогло вам.

PS: Извините за мой английский