Utilisation de fichiers batch, partie 3: La commande IF
Cette astuce continue la série sur l’utilisation des fichiers batch. Nous vous suggérons de (re) consulter les conseils précédents afin que nous puissions reprendre là où nous nous sommes arrêtés. Jusqu’à présent, nous avons couvert les commandes suivantes: DIR, REM, ECHO, FIND, TIME et TIMEOUT. Nous avons également utilisé les opérateurs suivants: sortie vers fichier (>), remarque (: :), no echo (@), pipe (|) et concaténation (&).
Enfin, on sait que l’on utilise des paramètres passés à un fichier batch via les combinaisons% 1,% 2,% 3, etc.
Cette astuce se concentrera sur les commandes liées à l’exécution d’un traitement conditionnel dans un fichier de commandes. Ceux-ci incluent IF, CHOICE, GOTO et la syntaxe spéciale de « : label ».
J’ai un fichier batch très pratique appelé Do.bat. Ce n’est guère plus qu’un «wrapper» qui exécute des programmes quel que soit leur emplacement.
Ainsi, par exemple, si je veux exécuter le programme appelé Prog1.exe, je taperais simplement
C:\Bat> DO Prog1
Si je voulais exécuter Prog2.exe, je taperais
C:\Bat> DO Prog2
La beauté de Do.bat est que lorsque je l’ai créé, j’ai entré les emplacements de tous les programmes avec lesquels je veux qu’il fonctionne. Je n’ai donc pas à me souvenir, par exemple, que Prog1.exe vit dans « C: \ Programmes \ Mes programmes \ Prog1.exe » et que Prog2.exe vit dans « D: \ Utilities \ Barry \ Prog2.exe » . De plus, je n’ai plus jamais à taper ces longs noms de chemin.
Mon fichier Do.bat ressemble à ceci:
@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Prog2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :Done
La première ligne du fichier garantit que les autres lignes ne seront pas affichées. Ceci est suivi de la ligne GOTO, qui prend comme paramètre le nom de l’étiquette vers laquelle le contrôle doit être transféré. Et il se trouve que cette étiquette est également le paramètre qui a été passé à Do.bat au départ. Ainsi, lorsque vous appelez Do.bat et que vous passez « Prog1 » comme paramètre, le fichier .bat effectue un GOTO vers une étiquette nommée « : Prog1 » (ce n’est pas sensible à la casse). L’exécution suit séquentiellement de haut en bas, la prochaine commande à exécuter est donc celle qui appelle Prog1.exe. Une fois ce programme terminé, le fichier .bat continue en exécutant la commande « GOTO Done ». Le libellé « : Done » est la dernière ligne du fichier, donc quand il atteint ce point, le fichier .bat se ferme. (Il existe une commande EXIT, mais si nous l’exécutions, cela mettrait fin non seulement au fichier .bat, mais aussi à toute la session CMD, ce qui n’est probablement pas ce que vous voulez faire.)
Vous pouvez également utiliser la commande CHOIX et peut-être créer un menu simple à partir duquel choisir le programme à exécuter. Dans ce cas, je pourrais créer un fichier appelé Choice.bat qui ressemblerait à ceci:
@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Done
La commande CHOICE fournit à l’utilisateur une invite pour entrer 1, 2 ou Q (par défaut, elle n’est pas sensible à la casse). Tout autre caractère est ignoré. Le commutateur / T indique le délai d’expiration dans 10 secondes, moment auquel la procédure se comportera comme si l’option Q était sélectionnée (/ D Q indique que l’option par défaut est Q). Une fois la commande CHOICE exécutée, la variable% ERRORLEVEL% est définie sur la valeur ordinale de l’option sélectionnée. Donc, si l’utilisateur a sélectionné 1,% ERRORLEVEL% est mis à 1; si l’utilisateur a sélectionné 2,% ERRORLEVEL% est mis à 2; et si l’utilisateur a sélectionné Q,% ERRORLEVEL% est mis à 3. Nous avons alors GOTO l’étiquette indiquée par% ERRORLEVEL% et exécutons l’action demandée.
Je pourrais écrire une astuce entière sur la commande IF, mais les bases sont que vous faites quelque chose comme:
IF arg1 operator arg2 command
où ‘arg1’ et ‘arg2’ sont des arguments testés, ‘operator’ est l’un des EQU, NEQ, LSS, LEQ, GTR, GEQ (c’est-à-dire EQUal, Not Equal, LeSS than, etc.), et ‘command’ est une commande de ligne de commande.
Un simple fichier batch pour faire écho P1 s’il y en a un pourrait ressembler à ceci:
@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof
(J’ai pris l’habitude d’utiliser [] autour de mes arguments pour éviter certaines complications.)
Il existe également d’autres saveurs d’IF. Par exemple, vous pouvez tester un niveau d’erreur, tester si un fichier existe, inclure une instruction ELSE, etc.
Sur la ligne de commande, effectuez un IF /? et vous aurez une bonne idée de tout ce que vous pouvez faire.
Cette astuce (13185) s’applique à Windows 7, 8 et 10.