Utilisation de l’instruction FOR
L’instruction FOR est une commande qui vous permet de « boucler » ou de répéter des commandes plusieurs fois. Elle est très similaire à l’instruction FOR fournie dans plusieurs langages de programmation. L’instruction FOR est souvent utilisée dans les fichiers de commandes, mais elle peut également être utilisée directement sur la ligne de commande.
Pour rappel, la forme générale de la boucle FOR est:
FOR %variable IN (set) DO command [command-parameters]
Où ‘variable’ est une seule lettre, ‘(set)’ spécifie un ensemble d’un ou plusieurs fichiers, ‘command’ est la commande d’invite de commande à exécuter pour chaque fichier de l’ensemble et ‘command-parameters’ sont facultatifs paramètres à passer à ‘commande’.
Supposons que vous ayez reçu plusieurs fichiers COM .dll que vous devez enregistrer dans le registre de Windows. Vous pouvez tous les mettre dans un dossier et exécuter la commande suivante à partir de ce dossier:
C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
Ce que cela fait, pour chaque fichier .dll qu’il trouve dans le répertoire actuel, est d’exécuter le programme regsvr32 dessus. (Le commutateur « / s » dit simplement à regsvr32 de faire son travail en silence.) La variable utilisée (« % i ») est sensible à la casse et prend la valeur de chaque fichier .dll tour à tour. Le nom du fichier .dll est ensuite transmis au programme regsvr32 en utilisant la même variable «% i».
Une variante de la boucle FOR générale utilise le commutateur / L et a cette forme générale:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
Ceci exécute une boucle où% variable est d’abord mis à ‘start’ et est incrémenté par ‘step’ jusqu’à ce qu’il atteigne la valeur ‘end’. (Cet usage devrait être très familier aux programmeurs.) Disons que vous devez afficher la liste des nombres de 1 à 5. Vous pouvez le faire de cette façon:
C:\> FOR /L %i IN (1,1,5) DO @echo %i
Une autre variante de la boucle FOR utilise le commutateur / D et a cette forme générale:
FOR /D %variable IN (set) DO command [command-parameters]
Avec cette variante, si «set» contient des caractères génériques, alors la commande fonctionne sur les noms de répertoires au lieu des noms de fichiers. Cela serait utile, par exemple, si vous vouliez copier un ensemble de fichiers à partir d’une arborescence de répertoires et placer tous les fichiers dans un répertoire.
Par exemple, j’ai un répertoire appelé \ Temp. Il contient des sous-répertoires appelés \ Temp \ Temp2 et \ Temp \ Barry. Les répertoires \ Temp \ Barry et \ Temp \ Temp2 contiennent des fichiers que je souhaite copier. Si je voulais copier tous les fichiers (sans la structure de répertoires) de l’arborescence \ Temp dans un répertoire appelé \ Files, je pourrais le faire comme ceci:
C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files
J’ai laissé à la fin ce que je pense être la forme la plus ésotérique de la boucle FOR. Il semble que l’utilisation du commutateur / F vous permettra de faire presque n’importe quoi – si vous pouvez seulement comprendre comment l’utiliser. La forme générale est:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(Désolé, tout ne tient pas sur une seule ligne.) Il existe plusieurs «options que vous pouvez utiliser, et la première« commande »(celle entourée par les apostrophes arrière) peut être n’importe quelle commande d’invite de commande. Voici donc un exemple d’utilisation de ceci:
FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"
(Désolé, tout ne tient pas sur une seule ligne.) Cette commande exécute une commande DIR / B sur C: \ Temp \ A.tmp. Pour chaque fichier qu’il trouve, il fait écho au nom du fichier et le dirige vers la commande Findstr, qui recherche toutes les lignes contenant un « a », « b » ou « c ». Une chose assez étrange à faire, d’accord, mais au moins cela montre comment vous pouvez utiliser / F. Je vous suggère de faire FOR /? * Pour obtenir une liste complète de toutes les options, puis vous n’êtes essentiellement lié que par votre imagination pour savoir comment l’utiliser.
Vous pouvez également utiliser la commande FOR dans un fichier de commandes. La seule différence est que vous doublez les% -signs, alors qu’en ligne de commande vous n’utilisez qu’un% -sign. Par exemple, si le deuxième exemple ci-dessus devait être placé dans un fichier batch, cela ressemblerait à ceci:
FOR /L %%i IN (1,1,5) DO @echo %%i
Cette astuce (13196) s’applique à Windows 7, 8 et 10.