« DOS/For » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎top : avec AWB
m Formatage, ajout de code
Ligne 3 :
Cette commande permet de faire une boucle. Celle-ci peut itérer une liste de valeurs, les lignes d'un ou plusieurs fichiers, ou encore un ensemble de nombres entiers. Le type de boucle est choisi par le commutateur indiqué au FOR (aucun, /D, /R, /L ou /F).
 
La commande FOR utilise une ou plusieurs variables locales pour effectuer la boucle. Dans le cas d'une commande entrée directement sous DOS, il faut les utiliser avec un simple <ttcode>%</ttcode>, alors que si la commande est utilisée dans un fichier batch .bat, il faudra l'utiliser avec <ttcode>%%</ttcode>. Dans la suite, les descriptions d'utilisation utiliseront un simple <ttcode>%</ttcode>, et les exemples, généralement destinés à être intégrés dans un fichier de commandes, auront les variables notées avec <ttcode>%%</ttcode>
 
== Boucle sur des fichiers ==
Ligne 125 :
Pour découper et ne pas prendre en compte tout ce qui se situe à droite d'un caractère, il existe l'option suivante (''end of line'') :
"eol=''caractère''"
Par exemple, si le caractère <ttcode>#</ttcode> est un caractère de début de commentaire, et si l'on ne veut pas lire les commentaires, il suffit d'ajouter l'option :
"eol=#"
 
Ligne 139 :
Par exemple, pour un découpage par mots, pour traiter, le premier et le deuxième mots, il faudra utiliser l'option :
"tokens=1,2"
Pour récupérer le reste de la ligne (sans séparer les mots), il suffit d'ajouter le caractère <ttcode>*</ttcode> :
"tokens=1,2*"
Dans la commande, pour utiliser ces différentes zones, il faut utiliser le nom de la variable avec un seul caractère, et de nouvelles variables seront automatiquement créées avec les zones suivantes en incrémentant alphabétiquement le nom de la précédente. Par exemple, si la commande FOR est déclarée avec la variable %%i, la première zone sera mémorisée dans %%i, la deuxième dans %%j, la troisième dans %%k (et ainsi de suite si d'autres zones sont définies). Utiliser la commande FOR en passant le nom de variable %%a permet d'avoir une marge généralement suffisante (26 caractères).
Ligne 149 :
Un commande FOR lisant ce fichier pourrait être :
FOR /F "eol=; tokens=2,3* delims=, " %%a IN (monfich.txt) DO @ECHO %%a %%b %%c
Dans cet exemple, le fichier ''monFich.txt'' va être lu ligne par ligne, aucune ligne de début n'est exclue. Les lignes contenant un caractère <ttcode>;</ttcode> ne seront lues que partiellement : du début jusqu'à ce caractère exclu. Chaque ligne sera découpée en zones selon les caractères virgule (<ttcode>,</ttcode>) et espace. La zone 2 sera mémorisée dans %%a, la zone 3 dans %%b, et toutes les zones suivantes dans %%c
L'exécution de cette commande est donc équivalente à :
@ECHO zarzera2 xvwcvw3 vcnvbn4, rtyutr5, fdgh6
Ligne 159 :
 
== Boucle sur le retour d'une commande ==
On pourrait lire de la même façon les lignes de retour d'une commande en redirigeant la sortie d'affichage sur un fichier via l'opérateur <ttcode>''commande'' > ''fichier'' </ttcode>, mais la commande FOR permet de lire directement le retour d'une commande sans passer par un fichier.
Le principe est le même que les boucles sur les contenus de fichiers, y compris pour les options, seul l'ensemble donné change.
 
Ligne 167 :
 
=== Exemple ===
L'exemple suivant permet de rechercher tous les fichiers .txt et compte le nombre de fichiers trouvés. Pour cela, la commande <ttcode>DIR /B *.txt</ttcode> liste tous les fichiers .txt sans information supplémentaire. Ainsi, il suffit de compter le nombre de lignes normalement affichées en utilisant un simple compteur.
@ECHO off
SET /A count=0
Ligne 192 :
 
=== Exemple ===
L'exemple suivant permet de rechercher tous les fichiers .txt contenant la chaîne de caractères <ttcode>toto</ttcode>. La commande <ttcode>FIND /C "toto" *.txt</ttcode> est utilisée pour faire la recherche. Cette commande retourne :
--------- ''nom du fichier lu'': ''nombre d’occurrences trouvées''
Même si la chaîne de caractères n'est pas trouvée, FIND retourne une ligne avec 0 pour le nombre d’occurrences (voir [[DOS/Find]]). L'exemple suivant traite donc, chaque ligne retournée par le FIND afin de récupérer le nom des fichiers trouvés.