
Tengo un archivo .bat en Windows que hace tres cosas.
cmd1 arg1 arg2
cmd2 arg3
cmd3 arg4 arg5 arg6
A veces cmd1 puede fallar y está bien, me gustaría continuar y ejecutar cmd2 y cmd3. Pero mi bate se detiene en cmd1. ¿Cómo puedo evitar esto?
ActualizarPara mayor claridad, estos no son otros archivos .bat, son comandos exe. Espero no tener que crear un árbol de archivos .bat solo para lograrlo.
Respuesta1
Otra opción es utilizar el amperstand ( &
)
cmd1 & cmd2 & cmd3
Si usa un doble, solo continúa si el comando anterior se completa exitosamente ( %ERRORLEVEL%==0
)
cmd1 && cmd2 && cmd3
Si usa una tubería doble ( ||
), solo ejecuta el siguiente comando si el anterior se completa con un código de error ( %ERRORLEVEL% NEQ 0
).
cmd1 || cmd2 || cmd3
Respuesta2
Esto funcionó para mí:
cmd.exe /c cmd1 arg1
cmd2
...
Esto se utiliza cmd.exe
para ejecutar el comando en una nueva instancia del intérprete de comandos de Windows, por lo que un comando fallido no interrumpe el script por lotes. La /c
bandera le dice al intérprete que finalice tan pronto como el comando termine de ejecutarse.
cmd2
se ejecuta incluso si el primer comando falla. Consulte cmd /?
desde el símbolo del sistema de Windows para obtener más información.
Respuesta3
Suponiendo que los cmds son otros archivos .bat, apila los comandos de esta manera:
call cmd1
call cmd2
call cmd3
Respuesta4
Para añadir aLa respuesta del canadiense Luke, si desea mantener su secuencia de comandos un poco más organizada, puede usar ^
para continuar la cadena de comandos en una nueva línea en su secuencia de comandos, como esta:
scoop install windows-terminal & ^
scoop install joplin & ^
scoop install neovim & ^
scoop install autohotkey & ^
... & ^
scoop update -a
en lugar de lo feo
scoop install windows-terminal & scoop install joplin & scoop install neovim & ...