Como posso criar um arquivo em lotes que deve executar o comando somente após a execução bem-sucedida do comando anterior?
windows-10
user692419
fonte
fonte
Respostas:
Depende do que você quer dizer com sucesso. Se quiser verificar se
foo.exe
não retornou nenhum código de saída diferente de 0, use:para executar
bar.exe
após ofoo.exe
código de saída retornado0
. Você pode omitirstart /wait
se o aplicativo que você está testando é 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 de Samuel Renkert e Garry .
fonte
if errorlevel 0 start /wait bar.exe
deve ser suficiente. No entanto, isso depende muito de qual definição de "execução bem-sucedida" o OP tem em mente.além da solução de nível de erro postada por Hex e aprimorada pelo comentário de Michael.
Este é ainda mais rápido para o que você deseja fazer.
firstcommand && secondcommand
O segundo comando será executado apenas se o primeiro comando for bem-sucedido. ou seja, se o primeiro comando não retornar um erro.
No exemplo abaixo, dir asfsds retorna essa saída, mas também retorna um erro
Se você executar dir asdfsss & blah, ele executará 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 idéia de álgebra booleana. Se A é verdadeiro e B é verdadeiro, então A AND B é verdadeiro. Portanto, para descobrir se A e B são verdadeiros, você pode marcar A e B, ou você pode ser "preguiçoso" ou eficiente, e apenas verificar um e se for falso, você sabe que toda a expressão é falsa. E se é verdade, então você tem que verificar um ao outro. Portanto, A &&B verifica A e somente B se tiver que verificar B; portanto, somente B se B for verdadeiro. Mas esse conceito de álgebra booleana é aplicado aos comandos; portanto, 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 Se você retornar um erro, ele tentará o segundo. Sem dúvida, a própria expressão retornaria true (sem erro) se ambas forem verdadeiras e falsas (erro), caso contrário.
Se você dirigiu filethatexists && echo a, você verá o primeiro comando sendo executado com êxito e, em seguida, ecoará uma execução. Da mesma forma eco a && echo b
fonte