Chapitre 19 : Des fichiers batch plus puissants : Partie 1 – Branchements et boucles

         1 – Branchement conditionnel avec l’instruction if

    Les fichiers batch peuvent prendre des décisions et choisir des actions en fonction de certaines conditions. Pour cela, on utilise des instructions commençant par « if ». La signification de base d’une instruction « if » (si) est la suivante :

IF une condition est vraie ALORS faire une action (SINON, faire une autre action)
La seconde partie de l’instruction (entre parenthèses) est optionnelle. Sinon, si la première condition n’est pas remplie, le système va exécuter la ligne suivante dans le fichier batch. La syntaxe est :

if (condition) (commande1) else (commande2)
La partie « Else » est facultative. Vous pouvez aussi utiliser la forme « if not » pour tester si une condition est fausse. Notez que « if » teste vrai et faux dans le sens booléen.

         2 – Instruction if exist

    Il existe une instruction spéciale « if exist » qui peut être utilisée pour tester l’existence d’un fichier, suivie d’une commande. Voici un exemple :

if exist unFichier.ext del unFichier.ext
Vous pouvez également utiliser un test à la forme négative :

if not exist unFichier.ext echo Pas de fichier

         3 – Instruction if defined

    Un autre cas spécial est l’instruction « if defined », celle-ci est utilisée pour tester l’existence d’une variable. Par exemple :

if defined uneVariable uneCommande
Vous pouvez aussi utiliser la forme négative : « if not defined ».

         4 – Instruction if errorlevel

    L’instruction « if errorlevel » est encore un autre cas spécial, qui est utilisé pour tester le code de sortie de la dernière commande qui a été exécutée. Plusieurs commandes renvoient un code de sortie qui indique l’état de la commande. En général, les commandes renvoient 0 si elles se sont exécutées correctement et 1 si la commande a échoué. Certaines commandes peuvent renvoyer d’autres valeurs de code de retour. Par exemple, la commande Xcopy peut renvoyer cinq codes de sortie différents. Ces codes de sortie sont enregistrés dans une variable spéciale appelée errorlevel. Voici un exemple d’utilisation :

if errorlevel n uneCommande
où « n » est l’un des codes de sortie (entier) possibles. Notez que la comparaison est effectuée en vérifiant si errorlevel est supérieur ou égal à n. Si vous utilisez « not », la comparaison vérifie si errorlevel est inférieur à n

Tableau I. Comparaison des opérateurs dans l’instruction « if »

Opérateur Signification
EQU égal à
NEQ différent de
LSS Plus petit que (Less Than)
LEQ Inférieur ou égal à (Less or Equal)
GTR Plus grand que (Greater Than).
GEQ Supérieur ou égal à (Greater or Equal)

         5 – Opérateurs de comparaison

    Dans certains cas, la condition à remplir est une comparaison de chaînes de caractères. Par exemple :

if chaine1 == chaine2
Remarquez que le signe « égal » est écrit en double. La condition est vraie si les deux chaînes de caractères sont strictement identiques, y compris la casse. Pour rendre la comparaison insensible à la casse, utilisez le commutateur « /i ». Pour des comparaisons plus générales, utilisez les opérateurs du tableau I. (Les opérateurs sont donnés en majuscules dans le tableau mais ils sont insensibles à la casse). Les comparaisons numériques ne fonctionnent qu’avec des chaînes ne contenant que des chiffres. Sinon, la comparaison est faite alphabétiquement. Par exemple « a » est inférieur à « b ». Pour ne pas tenir compte de la casse, utiliser le commutateur « /i ». Voici un exemple de commande :

if /i chaine1 gtr chaine2 uneCommande
Quand vous comparez des variables chaînes de caractères, il est préférable d’entourer le nom de la variable avec des guillemets. Vous pouvez par exemple utiliser :

if « %1 » == uneChaine uneCommande

         6 – La commade goto

    Généralement, l’exécution d’un fichier batch se déroule en exécutant à tour de rôle les commandes ligne par ligne. Cependant, on souhaite souvent exécuter une section particulière du fichier batch et sauter d’autres parties. La possibilité de sauter à une section particulière est fournie par la commande appelée « goto » (en un seul mot). La section de destination possède comme label un nom précédé d’un symbole deux-points ( . Ainsi, le script ressemble à cela :


goto :label
…{quelques commandes}…
:label
…{d’autes commandes}…
A l’exécution les « quelques commandes » seront sautées et les « autres commandes » seront exécutées. Le label peut être situé sur une ligne à n’importe quel endroit du script, y compris avant la commande « goto ».

Les commandes « goto » sont souvent utilisées avec les instructions « if ». Vous pouvez par exemple utiliser une commande de ce type :

if (condition) goto :label

         7 – Le label End of File (:eof) est utilisé pour sortir d’un script

    Il est parfois utile de terminer un script si une certaine condition est remplie (ou non). L’une des façons possibles est d’utiliser le label spécial :eof dans une commande goto. Ce label n’est pas présent dans le fichier. Windows XP et les versions suivantes reconnaissent :eof sans que ce label soit placé explicitement à la fin du fichier batch. Ainsi, si vous avez besoin de tester une condition particulière devant entraîner l’arrêt du script, vous pouvez écrire :

if (condition) goto :eof
Notez que cela termine le script mais que cela ne ferme pas forcément l’invite de commande.

         8 – Boucles avec if et goto

    Une ancienne méthode pour effectuer des tâches répétitives était d’utiliser un compteur, des instructions « if » et la commande « goto ». Le compteur détermine combien de fois la tâche doit être répétée, l’instruction « if » détermine le moment où le nombre de répétitions désiré est atteint, et la commande « goto » permet d’exécuter l’action appropriée : soit la tâche à répéter soit quitter. Généralement, il est préférable d’utiliser la méthode plus élégante proposée par la puissante commande « for…in…do ». Cette commande est décrite dans le chapitre suivant Toutefois, par souci d’exhaustivité et pour illustrer ce que je vous ai expliqué, je vais donner un exemple qui utilise la méthode avec un compteur.

Le script d’exemple ci-dessous crée des nombres entre 1 et 99 et les enregistre dans un fichier. Ce script utilise la commande « set » pour créer une variable qui sert de compteur pour savoir combien de fois on a bouclé.

@echo off
set /a counter=0

:numbers
set /a counter=%counter%+1
if %counter% ==100 (goto :eof) else (echo %counter% >> E:count.txt)
goto :numbers
(Les consignes de meilleure programmation indiquent que la variable %counter% devrait être localisée ou détruite à la fin mais par simplicité, j’ai omis les lignes supplémentaires pour le faire. Tel que c’est écrit, la variable d’environnement va persister jusqu’à ce que l’invite de commande (pas juste le script) soit fermée.

En anticipant un peu, je vous faire remarquer qu’il est possible d’obtenir le résultat du script ci-dessus avec un script de deux lignes utilisant l’instruction « for » décrite au chapitre suivant :

@echo off
for /l %%X in (1,1,99) do (echo %%X >> E:count.txt)