Boucles dans le langage de script Batch

View more categories:

1- Vue d'ensemble des boucles dans le langage Batch

Des délimiteurs standards (Standard Delimiter).

  • Espace (space)
  • Virgule ( , )
  • Point virgule ( ; )
  • ​​​​​​​TAB

2- La boucle for (Par défaut)

La boucle  For (par défaut) du langage  Batch sert à répéter la liste des fichiers.
Syntaxe :
@rem set_of_files -  Set of Files
@rem Files separated by standard delimiters.
@rem The parameter name 'variable' must be 1 character

FOR %%variable IN ( set_of_files ) DO command

@rem Hoặc:

FOR %%parameter IN ( set_of_files ) DO  (

     command
)
Par exemple : copiez certaines fichiers dans un répertoire (Remarque : Les fichiers doivent être copiés et le répertoire principale doit mettre dans le même disque).
copyFiles.bat
@echo off

@rem Copy to same Disk

FOR %%f IN (E:\test\file1.data  E:\test\file2.txt) DO  (
   
   echo Copying %%f
   copy  %%f E:\backup
)


pause
D'autres exemples :
@rem The delimiter is a semicolon (;)
FOR %%f IN ("E:\my dir\file1.data" ; E:\test\file2.txt) DO copy %%f E:\backup

@rem The delimiter is a comma ( , )
FOR %%f IN ("E:\my dir\file1.data" , E:\test\file2.txt) DO copy %%f E:\backup

@rem The delimiter is a space.
FOR %%f IN ("E:\my dir\file1.data" E:\test\file2.txt) DO copy %%f E:\backup

3- For /R

La boucle  FOR /R sert à répéter la liste des fichiers, comprenant des fichiers dans sous-répertoires, das petits- enfants... Ils sont appelés la boucle récursive (Recurse).
Syntaxe :
FOR /R [path] %%variable IN ( set_of_file_filters ) DO command

@rem Or:

FOR /R [path] %%variable IN ( set_of_file_filters ) DO (

   command
)
  • [path] : Ce paramètre est un repertoire principal. S'il n'est pas ce paramètre"le dossier comprenant le fichier scénario exécutable" ou "le dossier courant" sera considéré comme le répertoire principal.
  • set_of_file_filters : La liste des filtres de fichier. Par exemple *.txt , *.bat, ... ou le point ( . ) signifie tous.
  • variable: Est le nom de variable et doit have un seul caractère.
L'exemple ci-dessous imprime la liste de tous les fichiers  *.txt ou  *.log dans le répertoire  C:/Windows/System32 (Inclut également la recherche dans des sous répertoires, petits- enfants,..)
forR_example1.bat
@echo off

FOR /R "C:\Windows\System32" %%f IN (*.txt *.log) DO  (
   
   echo %%f
)

pause
 
L'exemple de la liste tous les fichiers dans le répertoir  C:/Windows/System32 (Inclut également la recherche dans des sous répertoires, petits- enfants,..)
forR_example2.bat
@echo off


FOR /R "C:\Windows\System32" %%f IN ( . ) DO  (
   
   echo %%f
)

pause

4- For /D

La boucle  FOR /D sert à répéter la liste des répertoires qui sont des sous- répertoires du répertoire courant. 
Syntaxe :
FOR /D [/r] %%variable IN ( set_of_directory_filters ) DO command

@rem Or:

FOR /D [/r] %%parameter IN ( set_of_directory_filters ) DO  (

    command
)
  • set_of_directory_filters : La liste des filtres de répertoire (directory filter) par exemple : en*, fr*,..  séparés par un délimiteur standard (Standard Delimiter).
  • [/r]: Est un paramètre récursif (Recurse) et n'est pas obligatoire, si ce paramètre est disponible, des sous répertoires, des petits-enfants ... seront impliqués dans la boucle.
  • variable: Est le nom de variable et doit avoir un seul caratère.
Par exemple : La liste des sous répertoires du répertoire  C:/Windows.
forD_example1.bat
@echo off

C:
cd C:/Windows

FOR /D %%d IN ( * ) DO  (
   
   echo %%d
)

pause
Par exemple : Listez des sous répertoires dans le répertoire  C:/Windows dont le nom est commencé par  "en" ou  "fr"
forD_example2.bat
@echo off

C:
cd C:/Windows

FOR /D /r %%d IN (en* fr*) DO  (
  
   echo %%d
)

pause

5- For /L

La boucle  For /R sert à répéter une portée de numéros (range of numbers).
Syntaxe :
FOR /L %%variable IN (start, step, end) DO command

@rem Or:

FOR /L %%variable IN (start, step, end) DO  (

     command
)
  • start: La première valeur de variable
  • step: Après chaque répétition (iteration) la valeur de variable sera ajoutée 'step'.
  • end: La dernière valeur.
Exemple :
forL_example1.bat
@echo off


FOR /L %%d IN (1 2 8 ) DO  (
   
   echo %%d
)

pause
forL_example2.bat
@echo off


FOR /L %%d IN (20 -2 5 ) DO  (
   
   echo %%d
)

pause
 

6- For /F

La boucle  For /F est une boucle compliqué mais puissante. Elle lit un fichier ou quelques fichiers puis analyse les contenus des fichiers. Le contenu d'un fichier est un texte, il est séparé en plusieurs petites pièces de texte qui sont nommé  Token. La règle par défaut de la séparation d'un texte est basée sur une espace vide (white space). Pourtant vous pouvez personnaliser la règle délimiteur par paramètre  ["delims=xxx"].
La boucle  For /F sert également à analyser les contenus d'une chaine (string), ou à exécuter un ensemble des instructions.
Syntaxe :
FOR /F ["options"] %%variable IN ( set_of_filenames ) DO command

FOR /F ["options"] %%variable IN ( set_of_filenames ) DO (

     command
)
      
    
FOR /F ["options"] %%variable IN ("Text string to process") DO command

FOR /F ["options"] %%variable IN ("Text string to process") DO (

     command
)
  • set_of_filenames: La liste d'un ou plusieurs fichiers.
  • options: Des options, par exemple : "delims=, tokens=1,2,4"
Option Description
delims=xxx Des caractères délimiteur (delimiter character(s)). Par défaut ils sont une espace (space)
skip=n Le premier numéro sera ignoré dans les contenus du fichier. Par défaut skip=0
eol=; eol (End of Line): Spécifie un caractère particulier qui est mis au début d'une ligne pour marquer cette ligne comme une ligne de commentaire. Des lignes de commentaires seront ignorées par le programme et par défaut est le caractère point virgule ( ; )
tokens=n1,n2,n3 Définit les positions concernées (n1, n2, n3, ..), par défaut est tokens=1
usebackq (Voir plus des explications dans des exemples)
Pour rendre facile à comprendre, analysons le fichier suivant :

eol (End of Line)

eol: Sert à spécifier un caractère spécial. Par défaut il est un caractère point-virgule ( ; ). Il est mis au début d'une ligne afin de marquer un commentaire (comment), le programme va ignorer cette ligne.

skip=n

skip: Déclare le numéro des premières lignes du fichier qui sera ignoré, le programme n'analysera pas ces lignes. Par défaut  skip=0

delims (Delimiter character(s))

delims: Définit des caractères délimiteur (delimiter characters), aidant le programme à délimiter chaque ligne de texte dans des sous paragraphes, chaque extrait de texte est appellé comme  Token. Des  Token sont numérotés 1, 2, 3, ...

tokens=n1,n2,n3

tokens: Déclare la liste des indices qui se sont intéressées, séparées par la virgule. Par exemple  tokens=1,2,4. Par défaut : tokens=1
Tokens Description
tokens=1,2,4 Les indices telles que 1, 2, 4 sont intéressées.
tokens=2-8 Les indices de 2 à 8 sont intéressées
tokens=3,* Les indices telles que 3, 4,5, ... sont intéressées
tokens=* Tous les indices sont intéressées
Par exemple "tokens=1,2,4", signifie que les  Token à la position 1, 2, 4 sont intéressées, d'autres  Token seront ignorées (Ignore).

Exemple de l'analyse de fichier :

L'exemple de l'utilisation la boucle  FOR /F pour lire le fichier  persons.txt:
persons.txt
List of celebrities
Creation date: 2017/09/11

; (Comment) Male List
Bill,Gates,1955/10/28,Male
Steve,Jobs,1955/02/24,Male
Mark,Zuckerberg,1984/05/16,Male
Sundar,Pichai,1972/07/12,Male
; (Comment) Female List
Hillary,Clinton,1947/10/26,Female
forF_example1.bat
@echo off


FOR /F "delims=, skip=3 eol=; tokens=1,2,4" %%i IN ( persons.txt ) DO  (
   
   echo Full Name: %%i %%j   Gender: %%k
   
)

pause

 
Remarque : Le nom des variables dans la boucle a seulement un caractère.
La variable  %%i est déclaré explitement dans la boucle. Les variables  %%j, %%k sont des variables déclarées implicitement (Le nom des variables implicitessont des caractères suivant des noms de variable explicites).

Exemple d'analyse la chaine :

  • TODO

View more categories: