XXVII. Variables dans l'invite de commandes Windows▲
Ce chapitre est une traduction de la page http://commandwindows.com/variables.htm dont l'auteur original est Victor Laurie.
Dans ce chapitre, je vais d'écrire la déclaration et l'utilisation de variables avec la commande "set".
Les variables ont une place importante dans de nombreux langages de script, mais elles jouent un rôle moindre dans la ligne de commande Windows. De nombreuses commandes sont prédéfinies et la portée des variables est assez limitée. Néanmoins, il existe d'importantes utilisations de la ligne de commande où les variables doivent être employées et dans ce chapitre, je vais décrire comment la ligne de commande utilise des variables.
XXVII-A. Comment les variables sont définies avec la commande "set"▲
On peut dire qu'il existe deux catégories de variables pour la ligne de commande. Certains pourraient utiliser le terme "variable" pour les arguments %1, %2, ..%9, qui sont utilisés pour représenter la saisie de l'utilisateur dans les fichiers batch. (Consultez la description sur cette page). Cependant, le terme "variable" est normalement réservé dans l'invite de commande pour les éléments déclarés comme des variables d'environnement avec la commande "set". Notez qu'il s'agit d'une méthode primitive pour définir des variables. Par exemple, il n'y a pas de types. Les variables d'environnement, y compris les nombres, sont stockés en temps que chaînes de caractères et les opérations qui les utilisent doivent prendre ce fait en compte. Les variables sont déclarées et une valeur leur est assignée en une seule instruction utilisant "set". La syntaxe est :
set
une_variable =
une_valeur
Les noms de variables ne sont pas sensibles à la casse et peuvent être constitués des caractères alphanumériques usuels et autres caractères courants. Certains caractères sont réservés et doivent être "échappés". Bref, il vaut mieux les éviter. Ces symboles sont listés dans le tableau II sur cette page. Aussi, étant donné que ce sont des variables d'environnement, leurs noms doivent être entourés de symboles % (pour cent) lorsqu'ils sont utilisés dans les références et expressions, par exemple :
%une_variable%
Le signe pourcent n'est pas utilisé dans la partie gauche de l'instruction "set" qui déclare une variable.
XXVII-A-1. Localiser les variables▲
La déclaration d'une variable dure tout le temps pendant lequel la fenêtre de commande courante est ouverte. Si vous utilisez un fichier batch qui ne ferme pas la fenêtre de commande à la fin du traitement, toutes les variables déclarées par le batch restent définies. Si vous souhaitez limiter la portée d'une variable à un ensemble d'instructions particulier, utilisez les commandes "setlocal" et "endlocal". Ainsi, pour limiter la déclaration d'une variable à un bloc de code particulier, utilisez :
....
setlocal
set
une_variable =
une_valeur
...{des instructions}...
endlocal
...
XXVII-A-2. Variables saisies par l'utilisateur▲
La commande "set" peut également accepter une saisie de l'utilisateur comme valeur pour une variable. Pour cela, on utilise le commutateur "/p". Un fichier batch attendra que l'utilisateur entre une valeur après l'instruction
set
/p nouvelle_variable=
Quand l'utilisateur aura saisi une valeur, le script continuera. Vous pouvez aussi définir un message d'invite pour l'utilisateur. Par exemple :
set
/p nouvelle_variable=
"Entrez une valeur "
Remarquez l'espace à la fin du message d'invite. Si vous ne le faites pas, le message d'invite et l'entrée de l'utilisateur se retrouveront côte à côte sur l'écran. Cela marche mais l'apparence n'est pas fameuse. L'utilisateur peut être tenté de taper une espace, cela ajoutera alors un espace à la valeur saisie.
XXVII-B. Opérations arithmétiques▲
La ligne de commande n'est pas prévue pour gérer les fonctions mathématiques mais il est possible d'exécuter des opérations très simples d'entiers avec les variables. Un commutateur "/a" a été ajouté à la commande "set" pour permettre quelques fonctions basiques. Cela est principalement utilisé pour effectuer des additions ou des soustractions. Par exemple, il est possible d'incrémenter ou de décrémenter un compteur dans une boucle. En principe, il est également possible d'effectuer des multiplications et des divisions, mais seuls quelques nombres peuvent être gérés donc l'utilisation en pratique est limitée. Bien que les variables soient stockées comme des chaînes, l'interpréteur de commande reconnaît les chaînes qui ne contiennent que des entiers, et leur permet d'être utilisées dans des expressions arithmétiques. La syntaxe est :
set
/a une_variable=
{expression arithmétique}
Les quatre opérations arithmétiques sont indiquées dans le tableau I. J'ai omis l'opération "modulo" qui utilise le signe % d'une autre manière. A mon avis, cela ne fait qu'ajouter de la difficulté à une syntaxe déjà compliquée. (L'utilisation du % de plusieurs manières ne peut amener que de la confusion).
Tableau I. Opérateurs arithmétiques
Symbole | Opération |
---|---|
+ | Addition |
- | Soustraction |
* | Multiplication |
/ | Division |
Voici l'exemple d'une variable %compteur% incrémentée :
set
/a compteur=
%compteur%
+1
Vous pouvez également écrire :
set
/a compteur+=
1
XXVII-C. Instruction de comparaison de variables dans les fichiers batch▲
Les variables sont souvent utilisées pour des comparaisons dans les instructions conditionnelles (if...) des fichiers batch. Certains des opérateurs de comparaison utilisés sont donnés dans le tableau I de la page sur l'instruction "if". En raison de la façon dont la ligne de commande gère les variables, il est nécessaire d'être prudent quand on compare des variables. Pour les chaînes, le moyen le plus sur est d'entourer les variables de guillemets. par exemple :
if
"%variable1%
" ==
"%variable2%
" une_commande