Sequência de execução de comando em arquivo em lote

Sequência de execução de comando em arquivo em lote

Como posso criar um arquivo em lote que deve executar o comando somente após a execução bem-sucedida do comando anterior?

Responder1

Depende do que você entende por sucesso. Se quiser verificar se foo.exenão retornou nenhumcódigo de saídadiferente de 0, use:

@echo off
start /wait foo.exe
if errorlevel 0 (
  start /wait bar.exe
)

para ser executado bar.exeapós foo.exeo código de saída retornado 0. Você pode omitir start /waitse o aplicativo que você está testando for o console um e não o desktop.

Mais informações sobre isso:Como obtenho o código de saída do aplicativo em uma linha de comando do Windows?, em respostas deSamuel RenkerteGary.

Responder2

além da solução errorlevel postada por Hex e melhorada pelo comentário de Michael.

Este é ainda mais rápido para o que você deseja fazer.

primeiro comando && segundo comando

O segundo comando só será executado se o primeiro comando for bem-sucedido. ou seja, se o primeiro comando não retornou um erro.

No exemplo abaixo, dir asfsds retorna essa saída, mas também retorna um erro

Se você fizer dir asdfsss & blah então ele será executado blah independentemente de o primeiro comando (dir sdsdf) ter retornado um erro ou não.

Mas se você executá-los com && entre eles, se o primeiro for um erro, o segundo não será executado. É baseado na ideia da álgebra booleana. Se A for verdadeiro e B for verdadeiro, então A AND B é verdadeiro. Então, para descobrir se A e B são verdadeiros, você poderia verificar A e B, ou poderia ser "preguiçoso" ou eficiente, e apenas verificar um e se for falso você saberá que toda a expressão é falsa. E se for verdade, então você tem que verificar um ao outro. Portanto, A && B verifica A e só verifica B se tiver que verificar B, então só verifica B se B for verdadeiro. Mas esse conceito de álgebra booleana é aplicado aos comandos, então ele executa o primeiro, o primeiro pode retornar um erro ou não, e se o primeiro retornar um erro, ele não tentará executar e verificar o segundo, e se o primeiro não retornar erro então tentará o segundo. Sem dúvida, a própria expressão retornaria verdadeiro(sem erro) se ambos fossem verdadeiros e falso(erro) caso contrário.

C:\Users\user>dir asdfsdf
O volume na unidade C não tem rótulo. O número de série do volume é B411-D580

Diretório de C:\Usuários\usuário

Arquivo não encontrado <---------------- Veja a saída do diretório asdfdsds acima

C:\Users\user>dir asdfsdf & echo a
O volume na unidade C não tem rótulo. O número de série do volume é B411-D580

Diretório de C:\Usuários\usuário

Arquivo não encontrado a <--- veja o 'echo a' executado

C:\Users\user>dir asdfsdf && echo a
O volume na unidade C não tem rótulo. O número de série do volume é B411-D580

Diretório de C:\Usuários\usuário

Arquivo não encontrado

C:\Usuários\usuário>

Se você fez dir filethatexists && echo a, verá que o primeiro comando é executado com êxito e, em seguida, echo a é executado. Da mesma forma echo a && echo b

informação relacionada