Windows Automation

Traitement efficace des fichiers dans les sous-répertoires avec des scripts batch

Spread the love

Traitement efficace des fichiers dans les sous-répertoires avec des scripts batch

Comprendre les bases des scripts batch

Les scripts batch, malgré leur ancienneté, restent un outil précieux pour automatiser les tâches sous Windows. Les scripts batch sont de simples fichiers texte contenant des commandes exécutées séquentiellement par cmd.exe, offrant une approche simple pour la manipulation de fichiers et l’administration système. Ils ont généralement l’extension .bat ou .cmd.

Les éléments essentiels incluent :

  • Variables : Stocker des données (par exemple, des chemins de fichiers) à l’aide de la commande set (par exemple, set myVar=value).
  • Commandes : Instructions comme dir, copy, del, mkdir et if.
  • Structures de contrôle : Permettre l’exécution conditionnelle et les boucles avec if, for et goto.

Traitement récursif des fichiers dans les sous-répertoires

La boucle for /r est cruciale pour la traversée récursive des répertoires. L’option /r indique à la boucle de rechercher dans les sous-répertoires. Cet exemple liste tous les fichiers .txt dans un répertoire spécifié et ses sous-dossiers :


@echo off
setlocal

set "rootDir=C:MyDirectory"  'Remplacer par votre répertoire racine

for /r "%rootDir%" %%a in (*.txt) do (
  echo Traitement du fichier : %%a
)

endlocal

Éléments clés expliqués :

  • @echo off : Supprime l’affichage des commandes.
  • setlocal : Crée un environnement local pour isoler les variables du script.
  • for /r "%rootDir%" %%a in (*.txt) do (...) : La boucle récursive. %%a contient le chemin complet du fichier.
  • endlocal : Termine l’environnement local.

Ajouter des opérations personnalisées sur les fichiers

Au-delà de la liste des fichiers, vous pouvez intégrer diverses commandes dans la boucle. Cet exemple copie tous les fichiers .txt dans un répertoire de sauvegarde :


@echo off
setlocal

set "rootDir=C:MyDirectory"
set "backupDir=C:Backup"

if not exist "%backupDir%" mkdir "%backupDir%"

for /r "%rootDir%" %%a in (*.txt) do (
  copy "%%a" "%backupDir%" & if errorlevel 1 echo Erreur lors de la copie de %%a
)

endlocal

Techniques robustes de gestion des erreurs

Une gestion efficace des erreurs est essentielle. Ce script amélioré vérifie si le répertoire de sauvegarde existe et gère les erreurs de copie potentielles :


@echo off
setlocal

set "rootDir=C:MyDirectory"
set "backupDir=C:Backup"

if not exist "%backupDir%" (
  mkdir "%backupDir%"
  if errorlevel 1 (
    echo Erreur lors de la création du répertoire de sauvegarde ! Fin du processus.
    exit /b 1
  )
)

for /r "%rootDir%" %%a in (*.txt) do (
  copy "%%a" "%backupDir%"
  if errorlevel 1 (
    echo Erreur lors de la copie de %%a. Suite du processus...
  )
)

endlocal

Techniques avancées et optimisations

Pour des scénarios plus complexes ou des grands répertoires, considérez ces optimisations :

  • forfiles : Offre un filtrage avancé (par exemple, par date, taille).
  • PowerShell : Fournit des outils plus puissants et plus efficaces pour le traitement intensif de fichiers.
  • Traitement parallèle : Explorez les techniques pour traiter plusieurs fichiers simultanément (nécessite des scripts plus avancés).

Foire aux questions

  • Q : Gestion des espaces dans les chemins de fichiers : Entourez toujours les chemins de guillemets doubles (").
  • Q : Traitement des fichiers modifiés après une date : Utilisez forfiles avec l’option /d.
  • Q : Utilisation d’autres caractères génériques : Oui, utilisez ? (un seul caractère) et * (zéro ou plusieurs caractères).
  • Q : Amélioration des performances : Pour les très grands répertoires, PowerShell offre des performances considérablement meilleures.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *