For (Windows)
| Fiche express | |
|---|---|
| Domaine | Boucles et traitement de texte en script batch |
| Commande | for (notamment for /f)
|
| Contexte | Équivalent Windows de for/awk côté bash
|
| Voir aussi | Awk (équivalent Linux) |
for est la commande de boucle des scripts batch Windows. La variante for /f
(traitement de texte ligne par ligne, avec découpage en champs) est la plus puissante et la
plus utilisée en administration — comparable à une combinaison de for et
awk côté bash.
Découper une sortie en champs (tokens)
for /f "tokens=1,2,3" %a in ('echo field1 field2 field3') do @echo %a %b %c
for /f "tokens=1,2" %a in ('echo field1 field2 field3') do @echo %a %b
⚠️ Dans un fichier .bat (pas en ligne de commande interactive), les variables
doivent être doublées : %%a au lieu de %a.
Compter les lignes d'un fichier
for /f %%a in ('type monfichier.txt^| find "" /v /c') do set /a cnt=%%a
Le caractère ^ échappe le | à l'intérieur de la commande entre
apostrophes.
Stocker le résultat d'une commande dans une variable
for /f "tokens=*" %%a in ('hostname') do set SERVERNAME=%%a
Découper un CSV champ par champ
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('type monfichier.csv') do (
for /f "tokens=1 delims=;" %%m in ("%%i") do set NOM=%%m
for /f "tokens=2 delims=;" %%m in ("%%i") do set AGE=%%m
for /f "tokens=3 delims=;" %%m in ("%%i") do set VILLE=%%m
echo NOM : !NOM!
echo AGE : !AGE!
echo VILLE : !VILLE!
echo ---
)
setlocal enabledelayedexpansion et la syntaxe !VARIABLE! (au lieu de
%VARIABLE%) sont nécessaires ici car les variables sont lues et réaffectées à
l'intérieur d'un même bloc ( ) — sans ce mode, batch évalue toutes les
%VARIABLE% d'un bloc une seule fois, au moment où le bloc est atteint, pas à
chaque itération.
Voir aussi
- Awk — équivalent Linux pour le traitement de texte structuré