HOWTO · Batch

Condition If ELSE dans un script Batch

Ce tutoriel discutera de la structure de la condition IF ELSE dans un script Batch.

Sur cette page

Dans un fichier batch Windows CMD, utilisez IF ... ELSE pour exécuter un groupe de commandes si une condition est vraie et un autre si elle est fausse. Encadrez chaque groupe de parenthèses et placez ELSE sur la même ligne logique de commande que la parenthèse fermante de la branche vraie. Les exemples ci-dessous sont des exemples de fichiers batch. Leurs sorties correspondent aux entrées et à l’environnement indiqués.

Syntaxe de IF … ELSE et exemple de base

La forme générale est IF condition ( commands-for-true ) ELSE ( commands-for-false ). La condition peut tester une comparaison ou un attribut de fichier. Un fichier batch peut omettre ELSE si aucune action n’est nécessaire lorsque la condition est fausse.

Exécutez cet exemple depuis un fichier .bat. Il définit deux valeurs, les compare, puis indique quelle branche est sélectionnée. Comme 10 est inférieur à 20, la branche vraie est sélectionnée ; la sortie est la suivante :

@echo off
set /a left=10
set /a right=20

if %left% LSS %right% (
    echo %left% is less than %right%.
) else (
    echo %left% is not less than %right%.
)
10 is less than 20.

Pour vérifier la présence d’un fichier, utilisez IF EXIST path. Cette instruction sélectionne la branche vraie si le fichier ou le dossier indiqué existe au moment de la vérification. Le fichier batch autonome suivant crée un fichier temporaire, vérifie sa présence, puis le supprime :

@echo off
set "sample=%TEMP%\if-else-sample-%RANDOM%.txt"
echo sample>"%sample%"

if exist "%sample%" (
    echo File exists.
) else (
    echo File does not exist.
)

del "%sample%"
File exists.

Remplacez le chemin pour vérifier un autre fichier. Si vous devez uniquement traiter le cas où un fichier est absent, IF NOT EXIST path ( commands ) exécute les commandes indiquées lorsque le chemin n’existe pas.

Opérateurs de comparaison dans Batch

Pour les conditions numériques, CMD prend en charge EQU (égal), NEQ (différent), LSS (inférieur à), LEQ (inférieur ou égal à), GTR (supérieur à) et GEQ (supérieur ou égal à). Ces opérateurs servent aux comparaisons numériques ; utilisez == pour comparer des chaînes. Mettez les valeurs de chaîne entre guillemets afin que les espaces ou une valeur vide ne perturbent pas la condition, par exemple : IF "%mode%"=="backup" ( echo Backup mode ).

NOT inverse une condition, comme dans IF NOT EXIST "report.txt" ( echo Create the report first ). Dans CMD, AND et OR ne sont pas des opérateurs logiques directs dans la syntaxe de la condition IF. Pour imposer plusieurs vérifications, imbriquez des instructions IF. Pour exécuter une autre commande après la réussite d’une commande, le chaînage && de CMD constitue une fonctionnalité distincte, dont le comportement diffère de la combinaison de conditions.

Conditions IF … ELSE imbriquées

Placez un autre IF ... ELSE dans une branche lorsque la décision suivante dépend de la première. Cet exemple complet vérifie d’abord le seuil de note le plus élevé, puis le seuil suivant :

@echo off
set /a score=85

if %score% GEQ 90 (
    echo Grade: A
) else (
    if %score% GEQ 80 (
        echo Grade: B
    ) else (
        echo Grade: C
    )
)

La première condition est fausse pour 85, donc CMD évalue la condition imbriquée. Comme 85 est supérieur ou égal à 80, cette branche affiche la note B. L’ordre est important : si vous vérifiez d’abord le seuil inférieur, les notes plus élevées satisferont également cette condition.

Exemples pratiques de IF … ELSE

Une vérification de fichier est utile avant de lire, copier ou supprimer un chemin. Par exemple, IF EXIST "%~1" ( ... ) ELSE ( ... ) vérifie le premier argument transmis à un fichier batch. %~1 retire les guillemets qui entourent cet argument ; le remettre entre guillemets dans la condition permet de gérer les chemins contenant des espaces.

Un script peut aussi tenter une opération administrative et en examiner le résultat, mais une seule vérification des privilèges n’est pas fiable dans tous les cas : l’échec de la commande peut être dû à la configuration d’un service ou à une stratégie, ainsi qu’aux permissions. Dans un fichier batch Windows CMD, le modèle consiste à exécuter net session >nul 2>&1, puis immédiatement IF ERRORLEVEL 1 ( echo The command did not succeed; check permissions and system configuration. ) ELSE ( echo The command succeeded. ). Cette commande propre à la plateforme dépend des services Windows et de la stratégie de compte ; aucun résultat d’exécution ni aucune garantie de privilèges ne sont donc avancés ici.

IF ERRORLEVEL n vérifie si la commande précédente a renvoyé un code de sortie supérieur ou égal à n. Le test doit suivre la commande dont vous voulez examiner le statut. Ne partez pas du principe que chaque échec signifie que le compte ne dispose pas de privilèges administratifs.

Erreurs courantes et périmètre de Windows CMD

Ces exemples utilisent la syntaxe des fichiers batch Windows CMD, et non celle de PowerShell ou de Bash. Laissez ELSE attaché à la parenthèse fermante du groupe de commandes de la branche vraie ; l’insertion d’un séparateur de commandes ou le placement de ELSE sur une ligne de commande distincte peut empêcher CMD d’associer correctement les branches.

CMD développe %variable% lorsqu’il lit un bloc entre parenthèses. Si la valeur d’une variable change dans ce bloc, une référence ultérieure à %variable% dans le même bloc peut encore contenir sa valeur précédente. Pour utiliser la valeur mise à jour dans un bloc, activez l’expansion différée avec setlocal EnableDelayedExpansion et référencez la variable sous la forme !variable!. Gardez à l’esprit que ! peut aussi avoir une signification particulière dans les chemins ou le texte lorsque l’expansion différée est activée.

N’utilisez pas AND ou OR comme s’ils combinaient deux comparaisons IF. Imbriquez les conditions pour exprimer des vérifications dépendantes et assurez-vous que chaque ELSE correspond au IF voulu. Pour comparer des chaînes, mettez les deux côtés entre guillemets, par exemple IF "%first%"=="%second%", afin que des espaces ou une valeur manquante ne modifient pas l’analyse de la comparaison par CMD.