2012-08-03 107 views
6

Tengo un archivo .bat al que puedo pasar parámetros.Llamar a un archivo .BAT desde otro archivo .bat

LOAD_TABLE_WRAPPER.BAT Table1 DEV 

En pocas palabras, ejecuta un SQL para cargar Table1 en el entorno Dev. Ahora, quiero que cargue varias tablas durante la noche. Por lo tanto, he creado un .BAT principal, que es algo como

::MASTER_LOAD.BAT 
CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev 
CALL LOAD_TABLE_WRAPPER.BAT Table2 Dev 
CALL LOAD_TABLE_WRAPPER.BAT Table3 Dev 

Si presento MASTER_LOAD.BAT de cmd, se ejecuta la carga de la Tabla 1, pero no proceda a la carga Tabla2. Estas son las dos últimas líneas de WRAPPER.BAT

:eof 
exit %ERROR_STATUS% 

Respuesta

0

Debe usar el comando de inicio para resolver este problema. La llamada hace que el proceso actual ejecute los comandos. Usted puede aprender más acerca de inicio here. aplicación básica debe ser:

"START program-name arg1 arg2"` 
0

¿Hay un problema en la ejecución de LLAMADA LOAD_TABLE_WRAPPER.BAT Tabla 1 Dev? ¿Cuál es el resultado cuando haces eco entre las llamadas?

5

Su comando exit %error_status% en LOAD_TABLE_WRAPPER.BAT está terminando su sesión por lotes, por lo que su MASTER_LOAD.BAT nunca tendrá la oportunidad de continuar con la próxima llamada.

Puede solucionar el problema simplemente añadiendo la opción/B para el comando EXIT

exit /b %error_stats% 

casi nunca utilizo salir sin/B en un archivo por lotes (aunque hay momentos en que no se quiere/B)

Pero otra alternativa es ejecutar los scripts llamados a través de CMD en lugar de CALL.

::MASTER_LOAD.BAT 
CMD /C LOAD_TABLE_WRAPPER.BAT Table1 Dev 
CMD /C LOAD_TABLE_WRAPPER.BAT Table2 Dev 
CMD /C LOAD_TABLE_WRAPPER.BAT Table3 Dev 

Hay una serie de diferencias entre los métodos

CALL con EXIT/B

  • Comparativamente rápido
  • puede preservar los valores de variables de entorno a su regreso (SETLOCAL está disponible si no desea conservar valores)
  • La secuencia de comandos llamada hereda la expansión retrasada estados de extensión d (activado o desactivado)

CMD/C

  • comparativamente lento
  • no puede preservar los valores de variables de entorno a su regreso.(Puede escribir las definiciones en un archivo y volver a cargarlas al volver al máster, pero eso no es conveniente o eficiente)
  • La secuencia de comandos llamada siempre comienza con los estados predeterminados de expansión y extensión retrasadas (la expansión normalmente retrasada está desactivada y las extensiones están habilitadas)

Nunca recomendaría usar CMD/C sobre CALL a menos que los archivos por lotes llamados tengan EXIT sin la opción/B y no se puede modificar el archivo por lotes para agregar la opción/B.

-1

tratar de dar un comando de pausa, de esta manera:

CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev PAUSE CALL LOAD_TABLE_WRAPPER.BAT Table2 Dev PAUSE CALL LOAD_TABLE_WRAPPER.BAT Table3 Dev

Cuestiones relacionadas