Agent skill

julien-ref-batch

Best practices for Windows Batch scripts (.bat). Covers encoding, path handling, variables, error management, and common pitfalls.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/julien-ref-batch-theflysurfer-claude-skills-market

SKILL.md

Best Practices - Scripts Batch (.bat)

STRUCTURE ET ENCODAGE

Encodage et Affichage

batch
@echo off
chcp 65001 > nul                    ; UTF-8 pour caractères spéciaux
setlocal enabledelayedexpansion     ; Variables dynamiques

En-tête Standard

batch
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

echo ========================================
echo   NOM DU SCRIPT - DESCRIPTION
echo ========================================
echo.

GESTION DES CHEMINS

Variables de Chemin Robustes

batch
set "SCRIPT_DIR=%~dp0"              ; Répertoire du script
set "ROOT_DIR=%SCRIPT_DIR%.."       ; Répertoire parent
set "TARGET_EXE=%ROOT_DIR%\app.exe" ; Exécutable cible
set "WORK_DIR=%SCRIPT_DIR%"         ; Répertoire de travail

Validation des Chemins

batch
if not exist "%TARGET_EXE%" (
    echo ERREUR: app.exe non trouve dans %ROOT_DIR%
    echo.
    pause
    exit /b 1
)

VARIABLES ET CONDITIONS

Syntaxe Variables Correcte

batch
; CORRECT - Utiliser %VAR% au lieu de !VAR!
set "RESULT=%ERRORLEVEL%"
if %RESULT% equ 0 (
    echo SUCCES
) else (
    echo ECHEC - Code: %RESULT%
)

; ÉVITER - !VAR! seulement si nécessaire
if !RESULT! equ 0 (...)

Tests de Conditions

batch
; Tests d'existence
if exist "%FILE%" (echo Fichier trouve)
if not exist "%FILE%" (echo Fichier manquant)

; Tests de variables
if defined VAR (echo Variable definie)
if /i "%CHOICE%"=="y" (echo Oui choisi)

; Tests numériques
if %CODE% equ 0 (echo Code zero)
if %CODE% neq 0 (echo Code non-zero)

BOUCLES ET LABELS

Labels et Goto

batch
:main_test
echo Test en cours...
goto summary

:summary
echo Fin des tests

Boucles For

batch
; Boucle sur fichiers
for %%f in (*.txt) do (
    echo Traitement: %%f
)

; Boucle sur liste
for %%i in (test1 test2 test3) do (
    echo Test: %%i
)

ENTRÉES UTILISATEUR

Input Simple

batch
set /p "CHOICE=Continuer (y/n)? "
if /i not "%CHOICE%"=="y" goto end

Choice avec Options

batch
choice /c yn /m "Voulez-vous continuer (Y/N)?"
if errorlevel 2 goto no
if errorlevel 1 goto yes

GESTION DES ERREURS

Codes de Sortie

batch
"%EXECUTABLE%" "%SCRIPT%"
set "RESULT=%ERRORLEVEL%"

if %RESULT% equ 0 (
    echo SUCCES - Code: %RESULT%
) else (
    echo ECHEC - Code: %RESULT%
    exit /b %RESULT%
)

Validation des Prérequis

batch
; Vérifier exécutable
if not exist "%EXE_PATH%" (
    echo ERREUR: Exécutable manquant
    pause
    exit /b 1
)

; Vérifier script
if not exist "%SCRIPT_PATH%" (
    echo ERREUR: Script manquant
    goto next_test
)

AFFICHAGE ET FEEDBACK

Messages Propres (Sans Emojis)

batch
echo SUCCES: Operation terminee
echo ERREUR: Fichier non trouve
echo ATTENTION: Script non lance automatiquement

Séparateurs Visuels

batch
echo ========================================
echo           RESUME DES TESTS
echo ========================================

Pause et Attente

batch
pause >nul                          ; Pause silencieuse
timeout /t 3 >nul                   ; Attente 3 secondes

SÉCURITÉ ET ROBUSTESSE

Variables Sécurisées

batch
; Guillemets pour espaces
set "PATH_WITH_SPACES=%USERPROFILE%\My Documents"

; Validation avant usage
if not defined REQUIRED_VAR (
    echo Variable requise manquante
    exit /b 1
)

Nettoyage Final

batch
:cleanup
; Nettoyer variables temporaires
set "TEMP_VAR="
set "RESULT1="
set "RESULT2="

echo Nettoyage termine
exit /b 0

EXEMPLE COMPLET - SCRIPT DE TEST

batch
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

echo ========================================
echo   SCRIPT DE TEST AUTOMATISE
echo ========================================
echo.

set "SCRIPT_DIR=%~dp0"
set "ROOT_DIR=%SCRIPT_DIR%.."
set "TARGET_EXE=%ROOT_DIR%\app.exe"

; Validation prérequis
if not exist "%TARGET_EXE%" (
    echo ERREUR: app.exe non trouve
    pause
    exit /b 1
)

; Test 1
echo Test 1: Compilation...
"%TARGET_EXE%" "test1.ahk"
set "RESULT1=%ERRORLEVEL%"

if %RESULT1% equ 0 (
    echo SUCCES: Test 1 passe
) else (
    echo ECHEC: Test 1 - Code %RESULT1%
)

; Résumé
echo.
echo ========================================
echo           RESUME
echo ========================================

if %RESULT1% equ 0 (
    echo Test 1: SUCCES
) else (
    echo Test 1: ECHEC
)

pause >nul

ERREURS COMMUNES À ÉVITER

  1. Encodage - Toujours utiliser chcp 65001 pour UTF-8
  2. Variables - Préférer %VAR% à !VAR! sauf cas spéciaux
  3. Chemins - Toujours utiliser des guillemets pour les espaces
  4. Emojis - Éviter dans les scripts batch (problèmes d'encodage)
  5. PowerShell - Utiliser cmd /c pour forcer CMD au lieu de PS
  6. Caractères spéciaux - Attention aux accents dans les echo

Didn't find tool you were looking for?

Be as detailed as possible for better results