Objectif :Créer des boucles dans des fichiers batch

 

Format:DO boucle_contrôle

commandes

[RÉPÉTER]

commandes

[FEUILLES DE TEMPS [n]]

commandes

Endo

 

Formats de contrôle de boucle

 

DO compter

FAIRE POUR TOUJOURS

DO varname = début à fin [PAR étape] [(commande)]

FAIRE PENDANT condition [(commande)]

FAIRE JUSQU'À CE QUE condition [(commande)]

FAIRE JUSQU'À DATEHEURE date heure [(commande)]

FAIRE POUR n [SECONDES | PROCÈS-VERBAL | HEURES] [(commande)]

DO varname IN [plage...] /D"répertoire" [/I:"texte" /S[[+]n] /A:[[-|+]rhsadecijopt /O:[-]acdeginorstuz fileset [(commande) ]

DO varname IN [/T"délimiteurs"] /L jeu de chaînes [(commande)]

DO varname IN /C stringset [(commande)]

DO varname IN /L jeu de chaînes [(commande)]

DO varname dans la commande /P ... [(commande)]

DO nomvar IN /Q jeu de chaînes [(commande)]

DO nomvar IN /Y nomtableau [(commande)]

DO nomvar IN @file [(commande)]

 

compter

Entier compris dans la plage [0, 9223372036854775807], ou une variable interne ou une fonction variable qui s'évalue à une telle valeur, spécifiant le nombre de fois que la boucle est exécutée.

varname

La variable d'environnement contenant la valeur actuelle de l'index de boucle, ou le nom de fichier ou la chaîne actuelle, ou la ligne actuelle d'un fichier. Ne préfixez pas le nom de la variable avec %.

début, fin, étape

Entiers compris dans la plage [-9223372036854775807, 9223372036854775807] ou des variables internes ou des fonctions variables qui évaluent de telles valeurs, contrôlant le nombre de fois que la boucle est exécutée.

condition

A expression conditionnelle pour déterminer si la boucle doit être exécutée ou non

ensemble de fichiers

Un nom de fichier ou une liste de noms de fichiers, éventuellement en utilisant caractères génériques

jeu de cordes

Un ensemble arbitraire de chaînes. Les caractères génériques ne sont pas interprétés.

filet

Un fichier dont chaque ligne contient une chaîne pour laquelle la boucle doit être exécutée

gamme

Une date, une heure, une taille ou une plage d’exclusion. Au maximum un de chaque, dans n'importe quel ordre.

commandes

Une ou plusieurs commandes à exécuter à chaque fois dans la boucle. Si vous utilisez plusieurs commandes, elles doivent être séparées par des séparateurs de commandes ou placées sur des lignes distinctes.

données

La date de fin de boucle au format ISO 8601

fiable

Le temps de terminaison de la boucle en 24h hh: mm: ss le format

/UN:

Sélection d'attribut

/C

Parcourez chaque personnage dans l'expression

/D"répertoire"

Répertoire de démarrage

/Je Texte"

(Description de la correspondance) Plage de description.

/Littéral)

Les membres du set sont des chaînes, pas des noms de fichiers

/O :... (Ordre)

L'ordre

/P

Analyser la sortie de la commande, en enregistrant la ligne de sortie suivante dans varname à chaque fois que la boucle est exécutée.

/Q

Comme /L, mais traite les arguments entre guillemets (avec des espaces intégrés) comme un argument unique.

/S

Effectuer la boucle dans le répertoire courant et tous ses sous-répertoires

 

Prise en charge étendue caractères génériques, gammeset inclure des listes pour le set. Utilisez les caractères génériques avec prudence sur les volumes LFN ; voir Recherches de fichiers LFN pour en savoir plus.

 

Utilisation

 

DO peut être utilisé dans fichiers batch, alias ou à l'invite de commande. Pour les utiliser dans des alias ou à l'invite, vous devez définir le DO sur une seule ligne et placer le corps de la boucle DO dans un groupe de commandes suivant l'expression DO. (Il n'y a pas d'instruction ENDDO dans un DO sur une seule ligne). Par exemple:

 

faire count=1 à 10 par 1 (echo count=%count)

 

Si le dernier argument de la ligne est un seul (, il est interprété comme le début d'un groupe de commande. DO ajoutera les lignes suivantes (dans un fichier batch) ou vous demandera d'entrer davantage de données (sur la ligne de commande) jusqu'à ce qu'il obtienne une fermeture. ).

 

Lorsque vous utilisez DO sur un lecteur LFN, vous devez citer tous les noms de fichiers contenant des espaces ou des caractères spéciaux. La même restriction peut s'appliquer aux noms renvoyés dans la variable DO, si vous les transmettez à TCC commandes internes ou autres commandes qui nécessitent de citer les noms de fichiers avec des espaces. DO ne cite pas automatiquement les noms renvoyés, même si vous avez inclus des guillemets dans l'argument d'origine.

 

DO définit quatre variables internes :

 

%_do_dirsLe nombre de répertoires parcourus (avec /S) pour la boucle DO actuelle. (C'est-à-dire que les DO imbriqués ont chacun leurs propres _do_dirs, _do_files, _do_errors et _do_loop.)
%_do_filesLe nombre d'entrées de répertoire (fichiers ou sous-répertoires) traitées pour la boucle DO actuelle.
%_do_errorsLe nombre d'erreurs pour la boucle DO actuelle.
%_do_loopLe nombre de fois que la boucle DO actuelle a été exécutée.

 

Types de boucles DO

 

DO peut être utilisé pour créer plusieurs types de boucles différents.

 

DO compter, est une boucle comptée. Les lignes du fichier batch entre DO et ENDDO sont répétées compter fois.

 

FAIRE POUR TOUJOURS crée une boucle sans fin. Tu dois utiliser FEUILLES DE TEMPS or GOTO pour sortir d'une telle boucle.

 

DO nomvar = début À fin [BY étape] est similaire à une "boucle for" dans les langages de programmation comme BASIC. DO crée une variable d'environnement, varname, et le définit égal à la valeur Commencer. If varname existe déjà dans l'environnement, il sera écrasé. DO commence alors le processus de boucle en comparant la valeur de varname avec la valeur de fin. If étape est positif ou non spécifié, et varname est inférieur ou égal à fin, DO exécute les lignes du fichier batch jusqu'au ENDDO. Ensuite, DO ajoute à la valeur de varname soit la valeur de étape si PAR étape est spécifié, ou 1, et répète le processus de comparaison et d'exécution jusqu'à ce que varname est supérieure fin. Cet exemple affiche les nombres pairs de 2 à 20 :

 

est-ce que je = 2 à 20 par 2

  écho %i

en finir

 

DO peut également compter à rebours plutôt qu'à augmenter. Si étape est négatif, varname sera diminué de la valeur absolue de étape avec chaque boucle, et la boucle s'arrêtera quand varname est inférieur à fin. Par exemple, pour afficher les nombres pairs de 2 à 20 dans l'ordre inverse, remplacez la première ligne de l'exemple ci-dessus par :

 

est-ce que je = 20 à 2 par -2

 

FAIRE PENDANT condition évalue condition à chaque fois dans la boucle comme un expression conditionnelle before exécutant la boucle, et ne l'exécutera que si elle est vraie. Si condition is FAUX lorsque le DO est exécuté pour la première fois, la boucle ne sera jamais exécutée.

 

FAIRE JUSQU'À CE QUE condition évalue condition en tant que expression conditionnelle à chaque fois après exécution de la boucle, et répète la boucle seulement si elle est FAUX. Par conséquent, les instructions de la boucle seront toujours exécutées au moins une fois.

 

FAIRE JUSQU'À DATEHEURE données fiable exécute la boucle jusqu'à ce que la date et l'heure actuelles soient égales ou supérieures à la date (format ISO) et à l'heure spécifiées (format 24 heures). La date et l'heure peuvent être au format AAAA-MM-JJ HH:MM:SS ou AAAAMMJJHHMMSS. (La date et/ou l'heure peuvent être une variable.)

 

FAIRE POUR n SECONDES | PROCÈS-VERBAL | HEURES exécute la boucle pendant la durée spécifiée.

 

DO varname IN ensemble de fichiers exécute les commandes entre DO et ENDDO en créant une variable d'environnement, varname, et en le définissant égal à chaque nom de fichier dans le ensemble de fichiers, ignorant les éléments ne correspondent pas aux noms de fichiers ou de répertoires. Ceci est similaire au set Utilisé dans le POUR commande, mais elle ne peut inclure que des noms de fichiers et de répertoires, pas des chaînes de texte arbitraires. Si varname existe déjà dans l'environnement, elle sera écrasée (contrairement à la variable de contrôle dans POUR). Par exemple :

 

faire x dans *.txt

 

en finir

 

exécutera la boucle une fois pour chaque .TXT fichier dans le répertoire courant ; à chaque fois dans la boucle la variable x sera défini sur le nom du prochain fichier qui correspond à la spécification du fichier. L'ordre des correspondances dépend du système de fichiers et n'a aucun rapport avec les caractéristiques des noms de fichiers correspondants.

 

Si, entre DO et ENDDO, vous créez un nouveau fichier susceptible d'être inclus dans la liste des fichiers, il peut apparaître ou non dans une itération de la boucle DO. L'apparition du nouveau fichier dépend de son emplacement physique dans la structure de répertoires, une condition sur laquelle TCC n'a aucun contrôle.

 

Pour utiliser la date, l'heure, la taille, la description ou l'exclusion de fichier gammes pour le set placez-les juste avant le(s) nom(s) de fichier, par exemple :

 

faire x dans /[d9-1-2018,9-31-2018] *.txt

 

DO varname DANS /L jeu de cordes exécute les commandes entre DO et ENDDO une fois pour chaque chaîne littérale dans jeu de cordes, réglage varname à chacun à son tour.

 

DO varname DANS /C jeu de cordes exécute les commandes entre DO et ENDDO une fois pour chaque caractère de jeu de cordes (y compris les espaces et les caractères spéciaux), réglage varname à chacun à son tour.

 

DO varname IN @déposer exécute les commandes entre DO et ENDDO une fois pour chaque ligne de filet, réglage varname au contenu de chacun tour à tour. Méfiez-vous des caractères ayant une signification particulière TCC, tels que les symboles de redirection et de tuyauterie, dans le fichier (use RÉGLAGES /X selon les besoins).

 

Pour exécuter la boucle une fois pour chaque ligne de texte dans le presse-papiers, utilisez AGRAFE: (ou CLIP0: - CLIP9:) comme nom de fichier (par exemple FAIRE X DANS @CLIP :). AGRAFE: ne renverra aucune donnée à moins que le presse-papiers contienne du texte. Voir Redirection Pour plus d'informations sur AGRAFE:.

 

Mots-clés spéciaux DO : ITÉRER et FEUILLES DE TEMPS

 

Deux mots-clés spéciaux, ITERATE et LEAVE, peuvent être utilisés dans une boucle DO/ENDDO. ITERATE ignore les commandes restantes à l'intérieur de la boucle et revient au début de la boucle pour une autre itération, à moins que DO ne détermine que la boucle est terminée. LEAVE sort de la boucle DO actuelle et continue avec la commande suivant son ENDDO. Les deux mots-clés peuvent être répétés aussi souvent que souhaité. ITERATE et LEAVE sont le plus souvent utilisés dans un IF or IFF commande (groupe):

 

faire pendant "%var" != "%val1"

 

 si "%var" == "%val2" quitter

en finir

 

LEAVE accepte un argument numérique facultatif (>=1) qui spécifie le niveau d'imbrication DO que vous souhaitez quitter. Par exemple, "LEAVE 2" quittera deux boucles DO imbriquées. Vous pouvez éventuellement transmettre une variable comme argument LEAVE.

 

Notes d'utilisation

 

  La saisie numérique peut être saisie au format décimal (une séquence de 0 à 9 chiffres) ou au format hexadécimal ("0x" suivi d'une séquence de chiffres hexadécimaux de 0 à F).

 

Les boucles DO peuvent être imbriquées, c'est-à-dire que vous pouvez avoir une boucle DO/ENDDO dans une autre boucle DO/ENDDO.

 

Vous pouvez quitter toutes les boucles DO/ENDDO dans un fichier batch en utilisant GOTO à une ligne après le ENDDO correspondant. Cependant, assurez-vous de lire les notes d'avertissement à propos GOTO et FAIRE sous le GOTO commande avant d’utiliser GOTO de toute autre manière dans une boucle DO.

 

Vous ne pouvez pas utiliser RETOUR revenir d'un GOSUB à l'intérieur d'une boucle DO.

 

Remarque: Ne confondez pas la commande DO avec l'option facultative sans rapport do mot-clé du POUR commander.

 

options:

 

/UN:Sélectionnez les fichiers dans un DO x IN par leur(s) attribut(s) spécifié(s). Voir Commutateurs d'attribut pour plus d'informations sur les attributs qui peuvent suivre /UN:.

 

Vous pouvez spécifier /A:= pour afficher une boîte de dialogue pour vous aider à définir des attributs individuels.

 

/CPour chaque boucle, attribuez le caractère suivant (y compris les espaces et les caractères spéciaux) de l'expression à la variable DO.

 

/D"annuaire"Définissez le répertoire de démarrage (à utiliser avec /S). /D prend en charge les noms de dossiers du shell Windows ; voir CDD pour en savoir plus.

 

/JE"texte"Sélectionnez des fichiers dans un DO x IN ... en faisant correspondre texte dans leurs descriptions. Voir Description Gammes pour en savoir plus.

 

/LLes paramètres suivants DO x IN /L sont des chaînes, pas des noms de fichiers. Chaque paramètre sera attribué en séquence, de gauche à droite, à la variable de contrôle de boucle lors de passages consécutifs dans la boucle. /L ne traitera pas les guillemets comme délimiteurs ; utilisez /Q si vous souhaitez transmettre des arguments avec des espaces blancs intégrés.

 

/NDésactiver les options :

 

dIgnorer les répertoires cachés (lorsqu'il est utilisé avec /S)
jIgnorer les jonctions (lorsqu'il est utilisé avec /S)

 

/O :...Trier les fichiers avant de les traiter.

 

Vous pouvez utiliser n'importe quelle combinaison des options de tri ci-dessous. Si plusieurs options sont utilisées, la liste sera triée avec la première option de tri comme clé primaire, la suivante comme clé secondaire, et ainsi de suite :

 

nTrier par nom de fichier et extension, sauf si e est explicitement inclus.
-Inverser l'ordre de tri pour la clé de tri suivante
aTriez les noms et les extensions dans l'ordre ASCII standard, plutôt que numériquement lorsque des sous-chaînes numériques sont incluses dans le nom ou l'extension.
cTrier par taux de compression
dTrier par date et heure (la plus ancienne en premier) ; regarde aussi /T:acw
eTrier par extension
gRegroupez d'abord les sous-répertoires, puis les fichiers
iTrier par description
oTrier par propriétaire
rInverser l'ordre de tri pour toutes les options
sClasser par taille
tPareil que d
uNon trié
zPareil que s

 

L'option /O:... enregistre tous les noms de fichiers correspondants, puis effectue l'opération demandée. Cela évite le problème potentiel du traitement des fichiers plus d'une fois.

 

/PPour chaque boucle, attribuez la ligne de sortie suivante de commander à la variable DO.

 

/QLes paramètres suivants DO x IN /Q sont des chaînes, pas des noms de fichiers. Chaque paramètre sera attribué en séquence, de gauche à droite, à la variable de contrôle de boucle lors de passages consécutifs dans la boucle. Contrairement à /L, /Q traitera les arguments entre guillemets doubles avec des espaces intégrés comme un seul argument.

 

/SEffectuez la boucle DO dans le répertoire courant puis sur tous ses sous-répertoires. (DO prend également en charge /R comme synonyme, pour des raisons de compatibilité avec FOR.)

 

Si vous spécifiez un nombre après le /S, DO limitera la récursion du sous-répertoire à ce nombre. Par exemple, si vous disposez d'une arborescence de répertoires "\a\b\c\d\e", /S2 n'affectera que les répertoires "a", "b" et "c".

 

Si vous spécifiez un + suivi d'un nombre après le /S, DO ne s'exécutera pas commander jusqu'à ce qu'il atteigne cette profondeur dans l'arborescence des sous-répertoires. Par exemple, si vous avez une arborescence de répertoires \a\b\c\d\e, /S+2 ne s'exécutera pas commander in \a or \un B.

 

/T"texte"Spécifiez les délimiteurs à utiliser lors de l'analyse d'un ensemble de chaînes.

 

/YLisez un tableau unidimensionnel et attribuez chaque valeur à la variable DO. Par exemple:

 

faire x dans /Y MyArray

   écho x = %x

en finir