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 :
Echo Le path actuel est : %path%
Par contre pour ajouter un complément au path vous écrirez
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 ->
set myvar [= ! autre opérateur d'assignation] [value]
- 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
set nom_de_ma_variable=myvar
avec suivi de l'opérateur - 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" - 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
INVALID : if ( a NEQ b) (command) [else (command)]
Le code valide est :
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
Partager