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 :

Utiliser des caractères spéciaux dans les noms de variables?


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut Utiliser des caractères spéciaux dans les noms de variables?
    Salut,

    je crée des variables en début de batch, qui pointent vers des répertoires ou des fichiers.

    Je souhaiterais donner des noms facilement reconnaissables à ces variables, tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set _batch=%~dp0
    set #missing=%_batch%missing.txt
    Est-ce que l'emploi de "_" et de "#" est autorisé dans les noms de var?

    Et qu'y a-t-il d'autre comme caractères que l'on peut utiliser pour rendre les nom un peu "spéciaux"?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Un simple test,
    [ set #test=0
    echo %#test% ]
    t'aurai appris que oui, on peut utiliser # et _ .
    Pour ce qui est de % c'est plus compliqué (set ^%test=0 met bien la variable %test à 0, c'est pour y acceder que c'est plus ardu :p - j'ai pas trouvé en fait, du moins pas en ligne de commandes. Avec les ! dans un batch, ça passe)

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Question bête : pourquoi utiliser des préfixes qui vont méchamment alourdir tes batchs (et sûrement provoquer quelques bugs bien sympathiques à trouver) alors que tu peux utiliser setlocal pour "nettoyer" ton environnement, et surtout ne pas polluer l'environnement du prochain batch ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Question bête : pourquoi utiliser des préfixes qui vont méchamment alourdir tes batchs (et sûrement provoquer quelques bugs bien sympathiques à trouver)
    J'pense pas que ça alourdisse des masses quand même, et ça aide à savoir de quel type de variable on parle . Pour les bugs j'suis plutôt sur la même longueur d'onde, et d'ailleurs c'est pour ça que je demandais.

    alors que tu peux utiliser setlocal pour "nettoyer" ton environnement, et surtout ne pas polluer l'environnement du prochain batch ?
    J'maîtrise pas ce genre de truc, sauf le enabledelayedexpansion (et encore je pige pas trop à quoi ça sert, mais je sais que j'dois l'utiliser dans certains cas).

    Si tu m'en disais plus je pourrais peut-être comprendre, mais j'imagine que ça doit être gavant de devoir réexpliquer tout le temps.

    Bon en tous cas si de prime abord personne n'a manifesté de contre-indication concrête à l'usage de "#" et de "_", ça me suffira dans un premier temps.

    developpez.net forever !

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    C'est lourd si tu préfixes via une commande du genre "%_prefix%", ou si c'est trop long, et tu peux avoir des effets de bord parfois (même si, effectivement, "_" est peu risqué). C'était souvent nécessaire à une époque, à cause des conflits de nommage, mais ça ne l'est quasiment plus actuellement.

    Pour l'intérêt du setlocal, essaie tout simplement ce batch, tu vas comprendre immédiatement je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @echo off
    echo.
    echo Valeur initiale de "TEMP" :
    set temp
    echo Valeur initiale de "GLOUBIBOULGA" :
    set GLOUBIBOULGA
    echo.
    echo Passage en environnement local : "TEMP" est conservé.
    setlocal
    set temp
    echo.
    echo On flingue "TEMP" :
    set temp=####################
    set temp
    echo On affecte "GLOUBIBOULGA", dans l'environnement local :
    set GLOUBIBOULGA=*****************
    set GLOUBIBOULGA
    endlocal
    echo.
    echo Fin de l'environnement local : "TEMP" est revenu à sa valeur initiale.
    set temp
    echo "GLOUBIBOULGA" a disparu au passage.
    set GLOUBIBOULGA
    (La commande "set <variable>" affiche simplement l'état et la valeur d'une variable quelconque)

    C'est plus clair ? Pas besoin de nettoyer tes variables en fin de batch (le endlocal est implicite à la fin de l'exécution quoi qu'il arrive), pas de soucis d'écrasement / conflit (t'as le droit d'appeler une variable PATH si ça t'amuse, tant que tu ne te sers pas du PATH initial dans ton code), pas de problématique de nommage non plus.

  6. #6
    Membre chevronné
    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
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par DeVit Voir le message
    Salut,

    je crée des variables en début de batch, qui pointent vers des répertoires ou des fichiers.

    Je souhaiterais donner des noms facilement reconnaissables à ces variables, tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set _batch=%~dp0
    set #missing=%_batch%missing.txt
    Est-ce que l'emploi de "_" et de "#" est autorisé dans les noms de var?

    Et qu'y a-t-il d'autre comme caractères que l'on peut utiliser pour rendre les nom un peu "spéciaux"?

    salut,



    Pour les noms des variables, il faut réspecter quelques règles:

    1- éviter l'utilisation de quelques caractères réservés: % ^ ! | < > " = ~ &
    2- éviter l'utilisation de quelques variables réservé: ERRORLEVEL DIRCMD COPYCMD TIME ..etc
    3- éviter l'utilisation des caractères combinés: [ALT]+[NUM]
    4- éviter l'utilisation de nombres sauf si l'ERV est activée
    5- (optionel) éviter d'utiliser des noms accentuées

    pour plus d'info

    Citation Envoyé par Tuesd Voir le message
    Pour ce qui est de % c'est plus compliqué (set ^%test=0 met bien la variable %test à 0, c'est pour y acceder que c'est plus ardu :p - j'ai pas trouvé en fait, du moins pas en ligne de commandes. Avec les ! dans un batch, ça passe)
    set ^%test=0 est la même chose que set test=0.

    on sait bien que comme pour d'autres langages de scripts, les Scripts de commandes Win NT (ou bien les fichiers de commandes MS-DOS) ont des caractères spéciales ayants pour rôle d'échapper les caractères réservés:

    ces caractères spéciaux sont: '"' '\' '%' '^'

    dans ton cas tu as utiliser % et ^ qui eux même sont des caractères réservés donc il faut les échapper pour
    qu'ils soient intérpréter litteralement

    voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set  test=coucou
    set  test
    set ^test
    set %test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set ^^test=coucou
    set ^^test
    set %^^test
    set ^^%test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set %%test=coucou
    set %%test
    set %%^test
    set ^%%test

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Merci à toi Mac LAK pour l'explication sur le setlocal, et merci à toi fidèle IM_HERE pour tes précision toujours efficaces

Discussions similaires

  1. [Form] Caractères spéciaux dans les noms de champs
    Par Mistic100 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/06/2011, 09h16
  2. [File & Zip] Caractères spéciaux dans les noms de fichiers
    Par Marvelll dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/02/2010, 18h50
  3. Caractère spéciaux dans les noms de bases?
    Par soad6938 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/08/2008, 15h17
  4. Caractères spéciaux dans les noms de variables POST
    Par guidav dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2007, 14h36

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