Escape percent in bat file

38,976

Two %% equals to one %. That's right (but only in a script, not directly in the cmd), no need to use the escape operator ^.

But you are missing the agrupation operator ). That's the problem; the IF closes when it finds the ) at your command.

Use this:

rasdial sl employee1 K%%%%Pxev3=^)g:{#Swc9
Share:
38,976
user_v
Author by

user_v

Updated on October 12, 2020

Comments

  • user_v
    user_v over 3 years

    I was trying to write a VPN dialer/disconnector using a batch file, but I got stuck. After some investigation I found that the presence of % in the password is not playing well.

    Here is the code

    @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
    

    In the above script I am trying to escape % using % (i.e. %%, reference from here), but the bat script gives g:{#Swc9 was unexpected at this time..

    To root cause further, I tried to double %% (escape %) in a different batch file, and it worked:

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

    Why does the same script when integrated to work with different connections not work?

  • user_v
    user_v over 11 years
    That was really cool. Missed the presence of ')' in the password. Should start writing more batch scripts. :) Thanks