batch-file
Pour les boucles dans les fichiers batch
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 dedelims=x
pour séparer les jetonsskip=n
Nombre de lignes à ignorer au début du fichier et des chaînes de texteeol=;
Caractère au début de chaque ligne pour indiquer un commentairetokens=n
Eléments numérotés à lire de chaque ligne ou chaîne à traiterusebackq
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.