2011-01-28 14 views

Respuesta

15

Debe usar call cuando necesite llamar a otro programa por lotes (script cmd). El uso de 'call' no tendrá efecto si prog1 es un archivo ejecutable. (prog1.exe)

Si, por ejemplo, tiene dos guiones:

cmd1.cmd 
cmd2.cmd 

Y dentro cmd1.cmd dispone de una línea:

cmd2.cmd 

... entonces la secuencia de comandos se detendrá tan pronto como sea cmd2.cmd ha terminado de ejecutarse. En su lugar debe usar:

call cmd2.cmd 
+0

Aha - entonces la distinción entre ejecutables externos y scripts cmd externos es la clave.Gracias por la iluminación – Martin

3

Normalmente, la llamada se usa para ejecutar otro archivo por lotes dentro de un archivo por lotes. Cuando se completa el archivo por lotes que se llama, se completa el resto del archivo por lotes original.

Nota: si el archivo por lotes no existe, aparecerá un mensaje de error.

sintaxis es: CALL [drive:][path]filename [batch-parameters]

No hay restricción en donde llamarlo. Puede usar el comando CALL en cualquier archivo por lotes para llamar a otro archivo por lotes.

Espero que esto ayude.

20

Se debe utilizar cuando sea call desea:

  • llamada de otro archivo de comandos y regresar a éste cuando esté hecho.; o
  • llamar a una función en el archivo de comando actual.

Un archivo de comandos con la línea:

number2.cmd 

se cadena en el fichero de number2.cmd, lo que significa que se ejecutará el guión, pero no volver a continuar con la ejecución de la actual.

En cuanto al segundo punto, puede hacer cosas como:

call :subroutine 
call :subroutine 
goto :eof 

:subroutine 
    echo in here 
    goto :eof 

y obtendrá in here impresa dos veces. Esta capacidad de invocar funciones dentro de scripts de comando es bastante útil.

+2

+1 - La función de subrutina parece muy útil. – Martin

+0

@paxdiablo, ¿Qué quiere decir con "* cadena * al archivo' number2.cmd'? – Pacerier

+0

@Pacerier, quise decir que no volverá al guión actual cuando termine, una frase a la que me he aferrado desde mis días de programación BASIC hace muchas décadas :-) Consulte https://en.m.wikipedia.org/wiki/Chain_loading para más detalles. Espero haber dejado eso más claro con la edición. – paxdiablo