IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

échappement % dans une variable


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut échappement % dans une variable
    Bonjour et merci d'avance pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set nameDirectory=1/2/3/4/5
    set nameDirectory=%nameDirectory:/=%5C%
    echo %nameDirectory%
    J'aimerais remplacer "/" par "%5C"
    Mais je ne parviens pas à échaper le premier "%"

    J'ai déjà essayé
    %%5C
    ^%5C
    ^^%5C

    Mais sans résultat.
    Merci à vous,

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    le parseur traite la ligne de gauche à droite à la rencontre du caractère spéciale '%' il essayera de lire le caractère suivant s'il est un chiffre entre 0 et 9 alors il essayera d'afficher le paramètre %n s'il ne trouve pas de chiffre alors il considère qu'il s'agit d'une variable alors il essayera de lire caractère par caractère jusqu'a ce qu'il trouve le caractère '%' final, s'il le trouve alors il va essayer d'afficher le contenu de la variable %variable%.

    dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set nameDirectory=%nameDirectory:/=%5C%

    va supprimer tous les '/' et ajouter 5C% au contenu de la variable %nameDirectory% et puisque le signe '%' n'est pas échapper alors ça va nous retourner 123455C au lieu de 123455C%

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set nameDirectory=%nameDirectory:/=%%5C%
    va supprimer tous les '/' et va ajouter le contenu du paramètre %5 + C% et puisque on n'a pas de paramètre %5 alors ça va nous retourner 12345C% mais le signe '%' n'est pas échapper alors ça nous affichera au final 12345C



    le mieu dans ton cas est de switcher vers la nouvelle syntaxe avec '!' en activant l'expansion retardée de variables:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    setlocal enabledelayedexpansion
    set nameDirectory=1/2/3/4/5
    set nameDirectory=!nameDirectory:/=%%5C!
    echo %nameDirectory%
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RESULTAT> 1%5C2%5C3%5C4%5C5

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Thanks merci de ta réponse.

    Effectivement le soucis vient de là.
    Néanmoins une question si tu me permet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocal enabledelayedexpansion
    Une fois l'avoir activé, je dois le désactiver pour la suite de mon code.
    Ou cela ne s'applique qu'à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set nameDirectory=!nameDirectory:/=%%5C!

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Citation Envoyé par Rifton007 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocal enabledelayedexpansion
    Une fois l'avoir activé, je dois le désactiver pour la suite de mon code.
    Ou cela ne s'applique qu'à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set nameDirectory=!nameDirectory:/=%%5C!
    salut,


    ça dépend de ton script:

    *si tu veux isoler cet environement du reste de ton code tu peux utiliser endlocal puis faire un tunneling de ta variable %nameDirectory%

    * si tu veux revenir à l'ancienne syntaxe tu peux utiliser setlocal disabledelayedexpansion sans te soucier d'échapper le caractère littéral '!'

    * si tu veux rester dans le même environement il te faut échapper tous les caractères littérals '!'

    pour plus de détails, consulte l'aide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cmdhelp c:\> hh ntcmds.chm::/setlocal.htm
    cmdhelp c:\> hh ntcmds.chm::/endlocal.htm
    cmdhelp c:\> hh ntcmds.chm::/cmd.htm

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci encore ces précieuse explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Stocker un noeud dans une variable
    Par Devotion dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 23/09/2004, 17h02
  2. [Sybase] résultat d'un select dans une variable
    Par stoz dans le forum Sybase
    Réponses: 2
    Dernier message: 14/09/2004, 14h28
  3. Résultat d'une requête dans une variable...
    Par Hoegaarden dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/04/2004, 13h51
  4. Réponses: 6
    Dernier message: 24/07/2003, 12h39
  5. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo