2012-06-25 19 views
28

Me preguntaba si esto era posible? No estoy familiarizado con el uso de la línea de comandos de Windows, pero tengo que usarlo para un proyecto en el que estoy trabajando. Tengo una cantidad de archivos, para los cuales necesito realizar una función para cada uno. Estoy acostumbrado a trabajar con Python, pero obviamente esto es un poco diferente, así que esperaba algo de ayuda.¿Cómo hacer un bucle for en la línea de comandos de Windows?

Básicamente necesito el bucle for para recorrer los 17 archivos de una carpeta, realizar una función en cada uno (que está usando el software específico que tengo aquí para el proyecto) y luego generar un archivo con un nombre único (el función normalmente requiere que diga el nombre del archivo de salida) Lo succionaría y lo haría a mano para cada uno de los 17, pero básicamente está creando una base de datos de un archivo, y luego lo comparo con cada uno de los 17. Necesita para ser iterado a través de varios cientos de veces sin embargo. Usar un ciclo for podría ahorrarme días de trabajo.

Sugerencias?

Respuesta

32

El intérprete de comandos tiene de hecho un constructo para la que se puede utilizar desde la línea de comandos o desde un archivo por lotes.

Para su propósito, es probable que desee algo como:

FOR %i IN (*.ext) DO my-function %i 

Lo que resultará en el nombre de cada archivo con extensión * .ext en el directorio actual se pasa a mi-función (que podría, por ejemplo, sea otro archivo .bat).

La parte (*.ext) es la "especificación de archivo", y es bastante flexible, con la forma de especificar conjuntos de archivos. Por ejemplo, puede hacer:

FOR %i IN (C:\Some\Other\Dir\*.ext) DO my-function %i 

Para realizar una operación en un directorio diferente.

hay decenas de opciones para la especificación de archivo y DE en general. Consulte

HELP FOR 

desde el símbolo del sistema para obtener más información.

+0

Gracias Eso es muy útil. ¿Qué hace el% yo? Y, en realidad, para usar la función necesito tener una línea de comando configurada en un directorio actual, y los archivos allí no son en los que necesito realizar la función. Están en otro directorio. ¿Hay alguna manera de indicar en qué directorio realizar el bucle for? – TheFoxx

+0

% i es solo una variable que contiene los nombres de archivo coincidentes. Puede usar diferentes modificadores para obtenerlo en diferentes formatos. Actualicé la respuesta para describir que la especificación de archivo puede incluir un directorio diferente, por lo que puede especificar un directorio particular para realizar el ciclo.La documentación también explica la opción/R, que recorrerá los directorios si así lo desea. –

+2

en un archivo de proceso por lotes %%: PARA %% i IN (* .ext) DO mi función %% i – Emile

2

Para hacer bucles de manera independiente de archivos o directorios véase E. gramo. Batch script loop,. Por cierto. MS ayuda debería ayudar también (pero que cava allí)

+0

lea la salida de "ayuda para" en su shell dos/win favorito. Esto dirá todo. (Y si no lo hace, "para" no está presente.) –

+0

Gracias por el enlace, aunque no responde directamente al OP, responde al título de la pregunta –

3

Esto puede ayudar a encontrar lo que está buscando ... Batch script loop

Mi respuesta es la siguiente:

@echo off 
:start 
set /a var+=1 
if %var% EQU 100 goto end 
:: Code you want to run goes here 
goto start 

:end 
echo var has reached %var%. 
pause 
exit 

La primera conjunto de comandos debajo de los bucles de etiqueta de inicio hasta que una variable,% var% llegue a 100. Una vez que esto sucede, se lo notificará y le permitirá salir. Este código se puede adaptar a sus necesidades cambiando el 100 a 17 y poniendo su código o utilizando un comando de llamada seguido de la ruta del archivo por lotes (Shift + clic derecho en el archivo y seleccione "Copiar como ruta") donde se coloca el comentario.

Cuestiones relacionadas