Sequência de execução de comando no arquivo em lotes

1

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

user692419
fonte
Olá, Bem-vindo ao super usuário. Você precisaria usar o que é chamado de instrução IF, que permite executar verificações no seu código antes da execução. Para ajudar ainda mais, expanda sua pergunta. Informações como o que você está tentando obter com esse arquivo em lotes seriam muito úteis para fornecer uma resposta robusta.
Lister

Respostas:

0

Depende do que você quer dizer com sucesso. Se quiser verificar se foo.exenã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.exeapós o foo.execódigo de saída retornado 0. Você pode omitir start /waitse 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 .

Hex
fonte
2
Eu não acho que você precise do aninhamento aqui; if errorlevel 0 start /wait bar.exedeve ser suficiente. No entanto, isso depende muito de qual definição de "execução bem-sucedida" o OP tem em mente.
um CVn 01/02
0

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-D580

Diretó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-D580

Diretó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-D580

Diretó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

barlop
fonte