Bonjour,

La confusion qui pêut être fatale est celle entre l'identifiant de la variable : son [nom] et sa valeur qui est [%nom%]

Quel est le nom d'une variable dans l'environnement et les Batch, prenons par exemple Le Path system,
dans la plupart des cas les documents la nommeront %PATH%
C'est faux c'est simplement [path] (insensible à la casse)

Certaines instructions utilisent le nom, d'autres exclusivement sa valeur, d'autres peuvent mélanger valeurs et noms :

Pour afficher le path vous écrirez :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Echo Le path actuel est : %path%
Par contre pour ajouter un complément au path vous écrirez
Code : Sélectionner tout - Visualiser dans une fenêtre à part
set path=%path%;{votre nouveau path}
C'est un principe identique sémantiquement à la notion de "valeur" et de "référence" de variables. Par contre en programmation nous travaillons toujours avec des noms de variables et ce n'est que lors du passage de paramètres que l'on distingue le passage par valeur et le passage par référence. Certains langages autorisent la manipulation des noms de variables de toute nature (objets).

Les instructions qui utilisent les variables par leur nom sont :
  • SET ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set myvar [= ! autre opérateur d'assignation]  [value]
    1. seul à gauche peut se trouver seulement un identifiant
      (ou bien, nous le verrons dans un autre sujet une valeur qui est le nom %nom_de_ma_variable%) par exemple avant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      set nom_de_ma_variable=myvar

      avec suivi de l'opérateur
    2. Opérateur :
      - assignation simple [=] : string
      - avec les nombres il faut utiliser le commutateur /a (ex set /a c=a+b*2) - avec les nombres incrémentation ou décrémentation de compteur [ myvar+= valeur] ou [myvar-=valeur] valeur devant être un entier. incrémente ou décrémente une variable numérique de "valeur"
    3. Valeur assignée : expression texte (ou interprétable par substitution de valeur de variable, %une_var% ou expression numérique qui peut contenir des fonction de calcul simple : au moins les quatre opérations sur des entiers sans niveau de (), d'autres opérateur existent)
      - Assignations booléennes

  • IF dans son groupe "comparateur" (les [] définissent un expression facultative-> Le comparateur ne peut utiliser en partie droite ou gauche que des valeurs et non des noms :
    la comparaison en mode étendu : notamment une forme (a NEQ b) est invalide, utilise les deux variables a et b, a non égal à b valable en texte et chiffres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INVALID : if   ( a NEQ b) (command) [else (command)]
    Le code valide est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VALID : if   ( %a% NEQ %b%) (command) [else (command)]
    voir doc MS : http://www.microsoft.com/resources/d....mspx?mfr=true

    La comparaison de nombres, quand à elle, nécessite aussi la commande de remplacement %x%, mais comme l'on manipule des string, il faut effectuer l'affectation des variables avant le calcul d'expression ne pouvant s'effectuer dans la comparaison.
    La comparaison d'entiers positifs se fait sans problème comme celle des entiers négatifs.

  • FOR : la complexité de la syntaxe nécessite de revenir dessus dans une autre faq


J'essayerai de montrer simplement qu'il est aussi possible de manipuler des noms de variables et de les passer par référence.

A bientôt

Trebly