Batch : Gérer les erreurs et créer un log dans vos scripts batch

Pour rendre un script batch fiable, il faut tester le code retour des commandes avec errorlevel, rediriger les erreurs et journaliser les étapes. Nous utiliserons set pour déclarer des variables et des redirections pour le log.

Ce mini tuto sert d’aide-mémoire pratique.

Tester errorlevel après une commande

Après l'exécution d'une commande, Windows conserve dans une variable spéciale (errorlevel) un code retour.
Ce code indique si la commande a réussi ou échoué.

Une commande réussie renvoie généralement 0. Toute valeur >=1 indique un problème.

@echo off
ping 127.0.0.1 -n 1 >nul
if errorlevel 1 (
   echo Erreur : la commande a échoué.
) else (
   echo Succès : la commande s'est exécutée correctement.
)

A noter : if errorlevel 1 signifie qu'on teste si errolevel est supérieur ou égale à 1.

Pour tester une valeur particulière, il faut utiliser %errorlevel%.

if %errorlevel%==2 echo Erreur spécifique

Rediriger la sortie et les erreurs vers un log

Rappel des concepts de base : 

  • stdout (1) : la sortie standard (les résultats normaux d'un programme)
  • stderr (2) : la sortie d'erreur (messages d’erreurs, avertissements)
  • stdin (0) : l'entrée standard

Pour rediriger les différentes sorties, il faut utiliser les commandes ci-dessous.

Commande Explications
>> Ajoute la sortie standard
2>> Ajoute la sortie d'erreur
2>&1 Fusionne sortie standard et sortie d'erreur

Exemple

@echo off
set log=execution.log

echo %date% %time% : Début >> "%log%"
dir "C:\DossierQuiNexistePas" >> "%log%" 2>&1

if errorlevel 1 (
echo %date% %time% : Erreur lors du listage >> "%log%"
) else (
echo %date% %time% : Listage OK >> "%log%"
)

echo %date% %time% : Fin >> "%log%"

Exemple complet : copie + vérification + log

Ce script copie un dossier, écrit un log horodaté, et renvoie un code d’erreur si la copie échoue.

Il illustre les conditions (if) et peut être adapté à vos besoins.

@echo off
set yyyy=%date:~6,4%
set mm=%date:~3,2%
set dd=%date:~0,2%
set log=D:\Backups\logs\run_%yyyy%-%mm%-%dd%.log

echo %date% %time% : Début >> "%log%"
xcopy "C:\Source" "D:\Backup\%yyyy%-%mm%-%dd%" /E /I /Y >> "%log%" 2>&1

if errorlevel 1 (
   echo %date% %time% : ECHEC copie >> "%log%"
   exit /b 1
) else (
   echo %date% %time% : Copie OK >> "%log%"
)

echo %date% %time% : Fin >> "%log%"
exit /b 0

Valider les paramètres et afficher l’aide

Pour des scripts réutilisables, vérifiez les arguments de la ligne de commande et affichez un message d’aide en cas d’erreur d’usage.

@echo off
setlocal enableextensions

rem Vérif des paramètres
if "%~1"=="" goto :usage
if "%~2"=="" goto :usage

rem Vérif de la source
if not exist "%~1" (
    echo Erreur: le dossier source "%~1" n'existe pas.
    exit /b 3
)

rem Création de la destination si nécessaire
if not exist "%~2" (
    mkdir "%~2" || (
        echo Erreur: impossible de créer le dossier destination "%~2".
        exit /b 5
    )
)

echo Copie de "%~1" vers "%~2"...
xcopy "%~1" "%~2" /E /I /Y >nul
set "rc=%errorlevel%"

rem xcopy renvoie 0 si aucun fichier copie, 1+ pour divers cas d'erreur/avertissement.
if %rc% GEQ 1 (
    echo Erreur: xcopy a echoue (code %rc%).
    exit /b 4
)

echo Terminé.
exit /b 0

:usage
echo Usage: %~nx0 "SOURCE" "DESTINATION"
exit /b 2

 

X.com Facebook Email

Posté le 02-11-2025