Recherche…


Syntaxe

  • pour / l %% p dans (startNumber, increment, endNumber)
  • pour / f %% p dans (nomfichier) commande
  • for / f %% p in ("textStrings") ne commande
  • pour / f %% p in ('commande')
  • pour le lecteur / r: \ path %% p in (set) commande
  • pour / d %% p dans (répertoire)

Remarques

La commande for accepte les options lorsque l'option /f est utilisée. Voici une liste d'options pouvant être utilisées:

  • delims=x Caractère de delims=x pour séparer les jetons

  • skip=n Nombre de lignes à ignorer au début du fichier et des chaînes de texte

  • eol=; Caractère au début de chaque ligne pour indiquer un commentaire

  • tokens=n Eléments numérotés à lire de chaque ligne ou chaîne à traiter

  • usebackq Utilisez un autre style de citation:

    Utilisez des guillemets doubles pour les noms de fichiers longs dans "fichiers"

    Utiliser des guillemets simples pour les 'textStrings'

    Utilisez des guillemets pour `command`

Faire une boucle sur chaque ligne d'un ensemble de fichiers

Ce qui suit fera écho à chaque ligne du fichier C:\scripts\testFile.txt . Les lignes vierges ne seront pas traitées.

for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
  echo %%A
  rem do other stuff here
  )

Un exemple plus avancé montre comment les données de l'ensemble de fichiers restreints peuvent être utilisées pour rediriger l'exécution en mode batch, tout en sauvegardant le contenu recherché dans un fichier:

@echo off
setlocal enabledelayedexpansion

for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
    set "last=%temp%\%%i"
    type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
     && (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))

:: add user tasks code here
if defined result echo Performing user tasks...

:end    
echo All tasks completed
exit /b

Notez combien de temps les chaînes de commande sont divisées en plusieurs lignes de code et que les groupes de commandes sont séparés par des parenthèses.

Visite récursive des répertoires dans une arborescence de répertoires

for /r commande for /r peut être utilisée pour visiter récursivement tous les répertoires d’une arborescence de répertoires et exécuter une commande.

@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
  rem enter the directory
  pushd %%a
  echo In directory:
  cd
  rem leave the directory
  popd
  )

Remarques:

  • for / r - Boucle à travers les fichiers (sous-dossiers Recurse).
  • pushd - Modifie le répertoire / dossier en cours et stocke le dossier / chemin précédent à utiliser par la commande POPD.
  • popd - Retourne le répertoire dans le chemin / dossier le plus récemment stocké par la commande PUSHD.

Renommer tous les fichiers du répertoire en cours

Ce qui suit utilise une variable avec une boucle for pour renommer un groupe de fichiers.

SetLocal EnableDelayedExpansion

for %%j in (*.*) do (
  set filename=%%~nj
  set filename=!filename:old=new!
  set filename=Prefix !filename!
  set filename=!filename! Suffix
  ren "%%j" "!filename!%%~xj"
  )

En définissant le nom de la variable %%j et en l'associant à tous les fichiers actuels (*.*) , Nous pouvons utiliser la variable dans une boucle for pour représenter chaque fichier du répertoire en cours.

Chaque itération (ou passe) de la boucle traite ainsi un fichier différent du groupe défini (qui pourrait également être n'importe quel groupe, par exemple *.jpg ou *.txt ).

Dans le premier exemple, nous substituons le texte: la chaîne de texte "old" est remplacée par la chaîne de texte "new" (si, mais seulement si, le texte "old" est présent dans le nom du fichier).

Dans le second exemple, nous ajoutons du texte: le texte "Préfixe" est ajouté au début du nom du fichier. Ce n'est pas une substitution. Cette modification sera appliquée à tous les fichiers du groupe.

Dans le troisième exemple, nous ajoutons à nouveau du texte: le texte "Suffixe" est ajouté à la fin du nom du fichier. Encore une fois, ce n'est pas une substitution. Cette modification sera appliquée à tous les fichiers du groupe.

La dernière ligne gère réellement le changement de nom.

Itération

for /L %%A in (1,2,40) do echo %%A

Cette ligne sera itérative de 1 à 39, augmentant de 2 à chaque fois.

Le premier paramètre, 1 , est le numéro de départ.

Le deuxième paramètre, 2 , est l'incrément.

Le troisième paramètre, 40 , est le maximum.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow