Échapper le pourcentage dans le fichier de chauve-souris

J’essayais d’écrire un dialer / déconnecteur VPN en utilisant un fichier de commandes, mais je me suis retrouvé bloqué. Après une enquête a révélé que la présence de% dans le mot de passe ne joue pas bien.

Voici le 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 

Dans le script ci-dessus, j’essaie d’échapper à% en utilisant% (c.-à-d. %%, référence à partir d’ ici ), mais le script bat donne g: {# Swc9 était inattendu pour le moment. .

Pour enraciner plus loin j’ai essayé double %% (escape%) dans un fichier batch différent et cela a fonctionné

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

Je me demandais pourquoi le même script, lorsqu’il est intégré pour fonctionner avec différentes connexions, ne fonctionne pas …

De l’aide?

Deux %% équivaut à un % , c’est vrai (mais seulement dans un script, pas directement dans le cmd), pas besoin d’utiliser l’opérateur scape ^ .

Mais il vous manque l’opérateur d’agrupation ) , c’est le problème, le SI se ferme quand on trouve le ) à votre commande.

Utilisez ceci:

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

J’espère que cela vous a aidé.

PS: Désolé pour mon anglais