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.
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
Rappel des concepts de base :
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 |
@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%"
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
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