¿Cómo ejecuto un script por lotes desde dentro de un script por lotes?

97

¿Cómo llamo a otro script por lotes desde dentro de un script por lotes?

Quiero que se ejecute en una ifdeclaración.

Kev
fuente

Respuestas:

219

Usar CALLcomo en

CALL nameOfOtherFile.bat

Esto bloqueará (pausará) la ejecución del archivo por lotes actual, y esperará hasta que CALLse complete el ed.

Si no desea que se bloquee, utilice STARTen su lugar.

Obtenga los detalles esenciales utilizando CALL /?o START /?desde el indicador de cmd.

yhw42
fuente
22

Puede invocar el script por lotes por su nombre, como si estuviera ejecutando en la línea de comandos.

Entonces, suponga que tiene un archivo bar.batque dice echo This is bar.bat!y desea llamarlo desde un archivo foo.bat, puede escribir esto en foo.bat:

if "%1"=="blah" bar

Ejecuta foo blahdesde la línea de comando y verás:

C:\>foo blah

C:\>if "blah" == "blah" bar

C:\>echo This is bar.bat!
This is bar.bat!

Pero cuidado : cuando invoca un script por lotes desde otro script por lotes, el script por lotes original dejará de ejecutarse. Si desea ejecutar el script por lotes secundario y luego volver al script por lotes anterior, tendrá que usar el callcomando. Por ejemplo:

if "%1"=="blah" call bar
echo That's all for foo.bat!

Si corres foo blahen eso, verás:

C:\>foo blah

C:\>if "blah" == "blah" call bar

C:\>echo This is bar.bat!
This is bar.bat!

C:\>echo That's all for foo.bat!
That's all for foo.bat!
Dan Fabulich
fuente
8

Deberías usar CALL

CALL batch.bat
Younes TARCHOUN
fuente
2

Puedes usar

call script.bat

o solo

script.bat
Elijah Saounkine
fuente
5
Si llama directamente a otro script dentro de su script, en caso de que cualquier comando en el script llamado devuelva un valor distinto de cero (error), el script del destinatario también dejará de ejecutarse, y si lo usa call, continuará su ejecución incluso con un error en el script llamado.
Bruno Finger
1

He aquí un ejemplo:

Tienes un murciélago:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END

y b.bat llamado condicionalmente desde a.bat:

@echo off 
echo "This is b.bat"
stanik
fuente
1

Si desea abrir el archivo por lotes en otra ventana, utilice start. De esta manera, básicamente puede ejecutar dos scripts al mismo tiempo. En otras palabras, no tiene que esperar a que termine el script que acaba de llamar. Todos los ejemplos a continuación funcionan:

start batch.bat
start call batch.bat
start cmd /c batch.bat

Si desea esperar a que termine el script, intente start /w call batch.bat, pero el archivo batch.bat tiene que terminar con exit.

hextech
fuente
¿Hay alguna forma de canalizar todos los errores de cada uno de estos scripts a la salida del script principal?
pistoleroor
0

Ejecutar en paralelo en ventanas de comando separadas en estado minimizado

dayStart.bat

start "startOfficialSoftwares" /min cmd /k call startOfficialSoftwares.bat
start "initCodingEnvironment" /min cmd /k call initCodingEnvironment.bat
start "updateProjectSource" /min cmd /k call updateProjectSource.bat
start "runCoffeeMachine" /min cmd /k call runCoffeeMachine.bat

Ejecutar secuencialmente en la misma ventana

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat
Minhas Kamal
fuente
-3

eh, no sé por qué, pero la llamada no
call script.batfuncionó, no volvió a la consola original.
cmd /k script.batvolvió a la consola original.

Steven
fuente
2
Considere editar su pregunta para explicar más formalmente qué no funcionó y qué sí, incluido el código que no funciona y el código que funciona
wundermahn