L'expansion des variables

L'expansion des variables est une étape du parsage au cours de laquelle les variables sont remplacés dans l'entrée de commande.

Il y a en réalité deux types d'expansions l'expansion conventionnelle et l'expansion retardée. La première a lieu lors de la lecture du fichier et la seconde a lieu lors de l'exécution de la ligne.

L'expansion conventionnelle

L'expansion conventionnelle a lieu à chaque lecture de ligne. On ne peut pas la désactiver.

Lors de cette étape Dos9 recherche les chaines délimitées par des %. Si Dos9 trouve de telles chaines, il considère qu'il s'agit de noms de variables et les remplace par leur contenu.

Exemple:

SET var=Hello world !
ECHO %var%
:: affichera "hello world !"

Si la chaine comprise entre deux signes % ne correspond pas à un nom de variable, alors Dos9 procède de la façon suivante :

On peut aussi spécifier des options lors de l'expansion. Pour cela il suffit d'insérer un signe : entre les signes % et après le nom de la variable. On peut donc utiliser les options suivantes :

Exemple:

SET foo=Hello world
ECHO %foo:~2,3%
:: Affichera "llo"
ECHO %foo:~2,-3%
:: Afficherra "llo wo"

Exemple:

SET foo=Ceci est un test
ECHO %foo:est=pingouin%
:: Affichera "Ceci pingouin un tpingouin"

L'expansion retardée

L'expansion retardée a lieu juste avant l'exécution de la ligne. Cette étape peut être activée ou désactivée via la commande SETLOCAL en utilisant les options ENABLEDELAYEDEXPANSION ou DISABLEDELAYEDEXPANSION

L'expansion des variables d'environnement se fait selon les même méthodes et options sauf qu'il faut alors remplacer les % par des !

Exemple:

SETLOCAL ENABLEDELAYEDEXPANSION
SET var=Hello world
ECHO !var!
:: Affichera "Hello world"

L'expansion des variables permet de pouvoir gérer convenablement les variables à l'intérieur des IF ou des FOR, car la valeur de la variable est mise à jour à chaque exécution.

Exemple:

SETLOCAL ENABLEDELAYEDEXPANSION
SET var=première valeur
IF 1==1 (
SET var=seconde valeur
ECHO %var%
:: Affichera "première valeur"
ECHO !var!
:: Affichera "seconde valeur"
)

D'autre part, l'expansion retardée permet aussi de contouner certains problème de parsages qui apparaissent traditionelement dans les scripts batch, notamment le problème de l'expansion de variables contenant des espace. Par exemple, le script suivant ne marche pas:

SET var=variable avec des espaces
IF %var%==test (
:: du code
)

Le code précédent ne fonctionnera pas car la variable var contient des espaces qui vont empêcher l'exécution correcte du IF.

Dans ce cas il n'est pas efficace de mettre %var% entre guillemets, car il subsisterait un bug si var contenait un ".

SETLOCAL ENABLEDELAYEDEXPANSION
SET var=variable avec des espaces
IF !var!==test (
:: du code
)

L'expansion retardée des variables permet ainsi d'empêcher les bugs dus à des entrée contenant, par example des Charactères spéciaux.

L'expansion des variables spéciales

Les Variables spéciales sont aussi remplacées lors de l'exécution de la ligne. (Voir la page pour plus d'infos)

Compatibilité

Compatible avec cmd.exe pour la majorité des tests, mais on ne peut pas être sûr que ce soit le cas étant donné que microsoft ne publie pas les spécifications de cmd.exe.

L'expansion suit les règles annoncées depuis la version 0.7, avant, l'expansion était beaucoup plus annarchique.

A voir aussi

Variables d'environnement, Variables spéciales, Commande SETLOCAL, Index des spécifications


Dos9 manual pages, The Dos9 Project - Copyright © 2010-2014 Darkbatcher

This is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Please report bugs and mistakes at : <darkbatcher at dos9 dot org>