Escape percent in bat file
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
user_v
Updated on October 12, 2020Comments
-
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 over 11 yearsThat was really cool. Missed the presence of ')' in the password. Should start writing more batch scripts. :) Thanks