2010-08-09 15 views
29

Estoy tratando de crear un script por lotes para mi máquina Windows que recorre una lista de valores (cadena/decimal) y utiliza cada valor como parámetro dentro del ciclo.Looping a través de valores de cadena de un archivo bat de línea de comando de Windows

A continuación se muestra un ejemplo de un simple bucle for me gustaría utilizar para mostrar todos los diferentes archivos de la versión (de mi lista)

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

que estoy teniendo problemas en forma de bucle a través de cada elemento y el uso una variable en mi declaración de eco.

+0

Es que la sintaxis de pseudo-código o se trata de otro idioma? – Synetech

Respuesta

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

Para uso en un archivo por lotes que tendrá que duplicar el %:

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

¿Qué sucede si las cadenas incluyen '?' O '*'? ¿Hay alguna manera de evitar que el intérprete de comandos los interprete como nombres de archivo? – Synetech

+0

Estoy usando el shell "bash" de Git for Windows (MINGW32) y obtengo 'bash": error de sintaxis cerca del token inesperado '(''. –

+1

@DaveHeq: No use bash y trate de ejecutar comandos cmd, entonces. – Joey

13

Suponga que tiene una larga lista de valores que va a ser muy incómodo para escribir en la línea de comandos. Además, hay un límite de longitud para la línea de comandos de DOS.

En este caso, los valores se pueden almacenar en un archivo arbitrariamente largo, uno por línea. Llamarlo my-values.list, con un contenido similar a:

1.1 
1.2 
2.4 
3.9 
3.9.1 
3.9.2 
3.91 
3.91.1 
... 

Ahora se podía leer las variables de este archivo de texto, línea por línea:

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

@David Liddle: Claro que sí - simplemente no entiendo (todavía) cómo :-) - Supongamos un archivo de texto muy largo 'values.list', donde tiene todos los valores listados, 1 por línea. Sería muy útil volver a escribir todos estos en la línea de comandos (que a su vez tiene límites de longitud). Tuve que hacer exactamente eso con ~ 2.500 valores hace un par de semanas. Y la lista que había creado a través de otro lote . Simplemente no necesitaba simplemente aburrirme 'echo echo ...' sino cosas más interesantes en su lugar ... ;-) –

12

@ respuesta de Јοеу funciona muy bien,

aquí es como lo he usado, para 'recorrer' una lista preestablecida de archivos en un orden específico.

@echo off 
for %%x in (
     a.js 
     storage.js 
     logic.js 
     main.js 
     z.js 
     ) do (
     echo your file name is %%x 
     echo "%%x" is a cool name 
     echo. 
     echo =-=-=-=-=-= 
     echo. 
     ) 

la razón por la que parece una lista vertical es por lo que será más fácil agregar o eliminar más elementos. (y 'echo' con 'dot' es para una línea vacía).

la salida tendrá el siguiente aspecto:

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. para el nombre de archivo de lista se debe preferir el uso de algo como esto:

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

Cuestiones relacionadas