2010-08-09 10 views
29

Je tente de créer un script de traitement par lots pour mon ordinateur Windows qui boucle une liste de valeurs (chaîne/décimale) et utilise chaque valeur comme paramètre dans la boucle.Mise en boucle des valeurs de chaîne à partir d'un fichier bat de ligne de commande Windows

Voici un exemple d'une simple boucle, je voudrais utiliser pour afficher tous les différents fichiers de la version (de ma liste)

FOR ? in ('1.1','1.2','2.4','3.9') do echo V[value_from_for_loop].txt 

J'éprouve des difficultés dans la façon de boucle à travers chaque élément et de l'utilisation une variable dans ma déclaration d'écho.

+0

Est-ce pseudo-code de syntaxe ou est-il d'une autre langue? – Synetech

Répondre

36
for %x in (1.1 1.2 2.4 3.9) do echo V%x.txt 

Pour une utilisation dans un fichier batch que vous aurez à doubler le %:

for %%x in (1.1 1.2 2.4 3.9) do echo V%%x.txt 
+0

Que se passe-t-il si les chaînes comportent '?' Ou '*'? Est-il possible d'empêcher l'interpréteur de commandes de les interpréter comme des noms de fichiers? – Synetech

+0

J'utilise Git pour Windows "bash" shell (MINGW32) et je reçois 'bash": erreur de syntaxe près du jeton inattendu '(''. –

+1

@DaveHeq: Ne pas utiliser bash et essayer d'exécuter des commandes cmd, – Joey

13

Supposons que vous avez une très longue liste de valeurs qui seront très mal à l'aise pour taper sur la ligne de commande. En outre, il existe une limite de longueur pour la ligne de commande DOS.

Dans ce cas, les valeurs peuvent être stockées dans un fichier arbitrairement long, un par ligne. Appelez-my-values.list, avec un contenu similaire à:

1.1 
1.2 
2.4 
3.9 
3.9.1 
3.9.2 
3.91 
3.91.1 
... 

Maintenant, vous pouvez lire les variables de ce fichier texte, ligne par ligne: la réponse de

for /f "tokens=*" %a in (c:\path\to\my-values.list) do echo. Version%~nxa.txt 
+4

@David Liddle: Bien sûr, il a - vous ne comprenez pas (encore) comment :-) - Supposons un très long fichier texte 'values.list', où vous avez toutes les valeurs listées, 1 par Il serait très peu pratique de taper tout cela sur la ligne de commande (qui a elle-même des limites de longueur) .J'ai dû faire exactement cela avec des valeurs de ~ 2.500 il y a quelques semaines et la liste que j'avais créée par un autre Je n'ai juste pas besoin de simplement + ennuyeux 'faire écho ...' mais des choses plus intéressantes à la place ... ;-) –

12

@ Јοеу fonctionne très bien,

ici est comment je l'ai utilisé, pour «marcher» une liste prédéfinie de fichiers dans un ordre spécifique. La raison pour laquelle il ressemble à une liste verticale est qu'il sera plus facile d'ajouter ou de supprimer plus d'éléments. (et 'echo' avec 'dot' est pour une ligne vide).

la sortie ressemblera à ceci:

C:\example>yourBatchName.cmd 
your file name is a.js 
"a.js" is a cool name 

=-=-=-=-=-= 

your file name is storage.js 
"storage.js" is a cool name 

=-=-=-=-=-= 

your file name is logic.js 
"logic.js" is a cool name 

=-=-=-=-=-= 

your file name is main.js 
"main.js" is a cool name 

=-=-=-=-=-= 

your file name is z.js 
"z.js" is a cool name 

=-=-=-=-=-= 

** P.S. pour le nom de fichier liste on doit préférer utiliser quelque chose comme ceci:

for %%e in (*.dll) do (....