2011-12-16 12 views
6

Tengo un archivo por lotes que tiene varios comandos de la siguiente manera;Control de devolución desde un archivo por lotes

XCOPY 
DEL 
RMDIR 

anotherBatch.bat 

XCOPY 
DEL 
RMDIR 

Como se puede ver, en el medio hay una llamada a otro archivo por lotes (anotherBatch.bat), lo que lo hace algún otro procesamiento.

Ahora mi pregunta es que después de que se ejecute otro lote, el control nunca regrese al archivo de proceso por lotes original y simplemente termina ahí.

¿Cómo me aseguro de devolver el control?

Respuesta

13

un lote SUBRUTINA es otro archivo por lotes llamado a través de comando CALL:

CALL subroutineName Param1 Param2 

La subrutina puede ser colocado en el mismo archivo de el código de llamada. Esto se indica mediante anterior a su nombre con dos puntos:

CALL :SubroutineInThisFile Param1 Param2 
. . . . 
. . . . 
. . . . 
EXIT /B 

:SubroutineInThisFile 
. . . 
EXIT /B 

:AnotherSubroutine 
. . . 
EXIT /B 

El comando EXIT/B (no sólo EXIT) se utiliza para marcar el final subrutina en el mismo archivo; esto también debe hacerse para el programa principal.

Si se invoca otro archivo por lotes sin comando CALL, como en su ejemplo, el resultado neto es similar a "GOTO a otro archivo": cuando el archivo invocado finaliza, el proceso finaliza en ese punto. Solía ​​llamar "Superposición" (en lugar de "subrutina") un archivo por lotes llamado de esta manera.

+1

+1 Buena explicación –

+0

Thx mucho ... ¿Hay alguna variación de CALL como params para hacer que anotherBatch se abra en una nueva ventana Y también se cierre automáticamente cuando termine ... – testndtv

+0

Comando Try start: START /? – Aacini

7

usted debe llamar explícitamente a otro archivo por lotes

call anotherBatch.bat 
Cuestiones relacionadas