
Eu tenho um arquivo .bat no Windows que faz três coisas
cmd1 arg1 arg2
cmd2 arg3
cmd3 arg4 arg5 arg6
Às vezes, o cmd1 pode falhar e tudo bem, gostaria de continuar e executar o cmd2 e o cmd3. Mas meu bastão para em cmd1. Como posso evitar isso?
Atualizarpara maior clareza - estes não são outros arquivos .bat, são comandos exe. Espero não precisar construir uma árvore de arquivos .bat apenas para conseguir isso.
Responder1
Outra opção é usar o amperstand ( &
)
cmd1 & cmd2 & cmd3
Se você usar um double, ele só continuará se o comando anterior for concluído com sucesso ( %ERRORLEVEL%==0
)
cmd1 && cmd2 && cmd3
Se você usar um canal duplo ( ||
), ele só executa o próximo comando se o anterior for concluído com um código de erro ( %ERRORLEVEL% NEQ 0
)
cmd1 || cmd2 || cmd3
Responder2
Isso funcionou para mim:
cmd.exe /c cmd1 arg1
cmd2
...
Isso é usado cmd.exe
para executar o comando em uma nova instância do interpretador de comandos do Windows, para que um comando com falha não interrompa o script em lote. O /c
sinalizador diz ao intérprete para encerrar assim que o comando terminar de ser executado.
cmd2
é executado mesmo se o primeiro comando falhar. Consulte cmd /?
o prompt de comando do Windows para obter mais informações.
Responder3
Presumindo que os cmds sejam outros arquivos .bat, empilham os comandos assim:
call cmd1
call cmd2
call cmd3
Responder4
Para adicionar aA resposta do canadense Luke, se quiser manter seu script um pouco mais organizado você pode usar ^
para continuar a cadeia de comando em uma nova linha em seu script, assim:
scoop install windows-terminal & ^
scoop install joplin & ^
scoop install neovim & ^
scoop install autohotkey & ^
... & ^
scoop update -a
Em vez do feio
scoop install windows-terminal & scoop install joplin & scoop install neovim & ...