68

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?

aschipfl
  • 33,626
  • 12
  • 54
  • 99
user_v
  • 9,628
  • 4
  • 40
  • 32
  • Possible duplicate of *[How do I escape ampersands in batch files?](https://stackoverflow.com/questions/1327431/how-do-i-escape-ampersands-in-batch-files)* – Peter Mortensen Nov 02 '18 at 11:45

1 Answers1

98

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
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
ElektroStudios
  • 19,105
  • 33
  • 200
  • 417
  • That was really cool. Missed the presence of ')' in the password. Should start writing more batch scripts. :) Thanks – user_v Nov 25 '12 at 16:58