Como posso criar um arquivo em lotes que deve executar o comando somente após a execução bem-sucedida do comando anterior?
Como posso criar um arquivo em lotes que deve executar o comando somente após a execução bem-sucedida do comando anterior?
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:
@echo off
start /wait foo.exe
if errorlevel 0 (
start /wait bar.exe
)
para executar bar.exe
após o foo.exe
código de saída retornado 0
. Você pode omitir start /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 .
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.
C: \ Users \ user> dir asdfsdf O
volume na unidade C não possui rótulo. O número de série do volume é B411-D580Diretório de C: \ Users \ user
Arquivo não encontrado <---------------- Veja a saída de dir asdfdsds acima
C: \ Users \ user> dir asdfsdf e eco de um
volume na unidade C não tem rótulo. O número de série do volume é B411-D580Diretório de C: \ Users \ user
Arquivo não encontrado a <--- veja o 'eco a' executado
C: \ Users \ user> dir asdfsdf && echo a
Volume na unidade C não tem rótulo. O número de série do volume é B411-D580Diretório de C: \ Users \ user
Arquivo não encontrado
C: \ Usuários \ usuá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