devstory

Boucles dans le langage de script Batch

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"
OptionDescription
delims=xxxDes caractères délimiteur (delimiter character(s)). Par défaut ils sont une espace (space)
skip=nLe 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,n3Dé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
TokensDescription
tokens=1,2,4Les indices telles que 1, 2, 4 sont intéressées.
tokens=2-8Les 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
Peut-être que vous êtes intéressé

Voici des leçons en ligne à part du site web o7planning que nous recommandons. La liste comprend des leçons en ligne et celles en promo.