For (Windows)

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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é