2011-04-12 31 views
10

Ahora tengo un trabajo por lotes que escribí que llama a otro archivo y pasa las variables que el ejecutable necesita para ejecutar (contraseña y nombre de archivo).Proceso por lotes todos los archivos en el directorio

Ex:

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml -Dadmin.db.password=test123 

me escribió un trabajo que hace esto, pero descubrió que no habría varios archivos.

El nombre de usuario y la contraseña nunca cambian, pero el nombre del archivo es diferente para 15 archivos xml diferentes, con tal vez más pronto.

Los archivos siempre se encontrarán en la misma carpeta. En lugar de terminar con 15-20 trabajos (uno para cada archivo), ¿puedo escribir algo que procese cada archivo ubicado en este directorio? Y o bien espere hasta que se complete uno antes del siguiente o puedo agregar un sueño de 3 minutos antes de que comience el próximo archivo.

Respuesta

30
pushd C:\test\utils 
for %%F in (F:\DB\*.xml) do (
    admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123 
) 
popd 

El %%~dpnxF expande a d rive, p ath, base de n AME y e x tensión del archivo actual.

Si tiene la intención de establecer y utilice variables de entorno (%foo%) en ese bucle, leer help set primero antes de entrar en problemas.

+0

Impresionante. Capaz de usar esto para lograr lo que necesitaba. Gracias. – Gabriel

+0

¿Puede explicar cómo * evitar * la molestia de usar 'set' dentro del bucle' for'? – Snekse

+0

Snekse, la palabra mágica hay * expansión de la variable demorada *. Es algo que tengo que explicar en cada segundo archivo por lotes que respondo. Está bien explicado en 'help set' también. – Joey

0
for file in f:\DB\* 
do 
    admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123 
done 
+0

no para el lote de Windows !!!! – kokbira

7

Puede usar el comando for. Algo como esto en un archivo por lotes:

for %%f in (*.xml) do call myotherbatch.bat %%f 

Suponiendo que el comando admin está ejecutando no vuelve hasta que el trabajo esté terminado, el bucle de arriba se procesarlos secuencialmente.

Si ejecuta el comando en el indicador (en lugar de en un archivo de proceso por lotes), utilice solo un único%.

Cuestiones relacionadas