Chapitre 20 : Des fichiers batch plus puissants : Partie 2 – Itérations avec For

         1 – Introduction

    Je vais décrire ici la puissante instruction « for…in…do ».

Les ordinateurs sont très forts pour répéter la même opération encore et encore… La ligne de commande contient une méthode puissante et polyvalente pour effectuer ce type d’opérations. Avec cette méthode, vous pouvez automatiser de nombreuses tâches consommatrices de temps. L’instruction de base est de la forme :

for
{chaque élément}
in
{un ensemble d’éléments}
do
{commande}
Une variable d’une seule lettre est utilisée pour représenter chaque élément lorsque la commande parcourt l’ensemble. Notez que, contrairement à la plupart des autres commandes Windows, les variables sont sensibles à la casse. Ainsi, « a » et « A » sont deux variables différentes. La variable n’a aucune signification à l’extérieur de l’instruction « For ». Je vais utiliser la variable X dans la suite de ce chapitre mais vous pouvez utiliser n’importe quelle autre lettre. (En principe, certains caractères non-alphanumériques peuvent aussi être utilisés, mais il me semble que c’est une mauvaise idée). La variable d’une lettre est précédée par un symbole % lorsqu’elle est utilisée en ligne de commande et doit être précédée de deux caractères % si elle est utilisée dans un fichier batch. Ainsi, l’instruction dans un fichier batch ressemblera à ceci :

for %%X in (ensemble) do (commande)
Ce qui fait de « For » une commande puissante est la variété d’objets qui peuvent être utilisés comme « ensemble » à parcourir, la disponibilité des caractères jokers et la possibilité de parcourir des fichiers et les sorties de commandes. Un certain nombre de commutateurs sont disponible pour aider à définir le type d’éléments dans l’ensemble à parcourir. Le tableau I liste ces commutateurs. Ils sont listés en majuscules pour plus de clarté mais la casse n’est pas importante.

Tableau I. Commutateurs utilisé avec FOR

Commutateur Fonction
/D Indique que l’ensemble contient des répertoires.
/R La commande est exécutée récursivement dans les sous-répertoires du répertoire parent indiqué.
/L Boucle sur une commande en utilisant des paramètres de début, de fin et de pas indiqués dans l’ensemble.
/F Parcours des fichiers ou une sortie de commande de plusieurs manières.

Je vais donner quelques exemples pour illustrer l’utilisation de « For » et de ses commutateurs.

         2 – Itération simple dans une liste

    L’ensemble d’éléments parcourus peut être listé explicitement. Par exemple, l’ensemble pourrait être une liste de fichiers :

for %%X in (fichier1 fichier2 fichier3) do commande
(Vous devez faire attention à utiliser les bons chemins quand vous effectuez des opérations de fichiers). Un autre exemple où les éléments sont des chaînes de caractères :

for %%X in (eenie meenie miney moe) do (echo %%X)
Vous pouvez aussi utiliser les jokers pour désigner un jeu de fichiers. Par exemple :

for %%X in (*.jpg) do commande
Cette syntaxe va exécuter « commande » sur tous les fichiers « jpg » du répertoire courant. Ce processus peut être enrichi en utilisant plusieurs membres dans l’ensemble. Par exemple pour exécuter une commande sur plus d’un type de fichiers, utilisez :

for %%X in (*.jpg *.gif *.png *.bmp) do commande
Comme toujours, gardez à l’esprit que la ligne de commande n’aime pas les noms de fichiers avec des espaces à moins que le nom soit correctement entouré de guillemets. Par conséquent, vous voudrez peut-être utiliser « %% X » pour la « commande ».

         3 – Boucler sur une série de valeurs

    L’action bien connue de parcourir une série de valeur qui a été décrite dans le cadre des instructions « if » et « goto » , se fait rapidement avec le commutateur /l (Ce commutateur est la lettre « L », et non pas un «un»). L’instruction est de la forme :

for /l %%X in (début, pas, fin) do commande
. L’ensemble consiste en entiers définissant la valeur initiale de X, la valeur d’incrément (ou décrément) de X, et la valeur finale de X quand le processus se terminera. Sur la page précédente, j’ai donné un exemple de fichier batch qui listait tous les nombres de 1 à 99. Si nous utilisons une instruction « For », cette tâche peut être accomplie avec une ligne :

for /l %%X in (1,1,99) do (echo %%X >> E:nombres.txt)
. Les nombres dans l’ensemble signifient que la valeur initiale de X est 1, que la variable X est incrémentée de 1 à chaque itération et que la valeur finale de X est 99.

         4 – Utiliser les répertoires

    Si vous souhaitez utiliser les répertoires dans la variable set, utilisez le commutateur /d. La syntaxe de la commande est la suivante :

for /d %%X in (ensembleDeRepertoires) do commande
. Voici un exemple qui affiche tous les répertoires (mais pas les sous-répertoires) présents sur le disque « C: » :

for /d %%X in (C:*) do echo %%X

         5 – Parcourir récursivement les sous-répertoires

    Si vous voulez appliquer une commande au répertoire parent ainsi qu’à ses sous-répertoires, utilisez le commutateur /r. La commande est alors de la forme :

for /r [repertoireParent] %%X in (ensemble) do commande
Cela permet souvent d’éviter le pénible problème de savoir quel est le répertoire de travail pour la commande shell. Par exemple, l’instruction :

for /r C hotos %%X in (*.jpg) do (echo %%X >> E:listeJPG.txt)
va lister tous les fichiers jpg dans le répertoire c hotos et ses sous-répertoires. Bien sur, une commande « dir » permet d’obtenir la même chose mais c’est simplement pour illustrer cette commande particulière.

         6 – arcourir des fichiers, chaînes et sorties de commandes

    Nous arrivons maintenant à un commutateur vraiment puissant qui n’avait même pas été imaginé du temps de DOS. Le commutateur /f nous amène dans un territoire avancé, donc je ne peux indiquer que les principaux aspects de ses utilisations. Les choses peuvent être assez complexes donc ceux qui sont intéressés peuvent consulter des livres de programmation ou la documentation Microsoft. Cependant, voici un bref aperçu de ce que l’on peut faire.

Cette version de la commande « for » vous permet d’examiner et de parcourir le texte de fichiers, les chaînes de caractères et les sorties de commandes. La syntaxe est :

for /f [options] %%X in (source) do commande
Les « options » représentent le critère de recherche dans le texte, et la « source » indique où le texte doit être cherché. L’une des utilisations la plus intéressante est l’analyse de la sortie d’une ou plusieurs commandes et la prise de décision basée sur ce qu’ont renvoyé la ou les commandes.

Pour en savoir plus, vous pouvez consulter l’aide de la commande for en utilisant la commande suivante :

help for