Sequência de execução de comandos no arquivo de lote

1

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

    
por user692419 01.02.2017 / 09:02

2 respostas

0

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 depois que foo.exe retornou o código de saída 0 . Você pode omitir start /wait se o aplicativo que você está testando for do console 1 e não do desktop.

Mais informações sobre isso: Como obtenho o código de saída do aplicativo a partir de uma linha de comando do Windows? , em resposta a Samuel Renkert e Garry .

    
por 01.02.2017 / 09:14
0

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

Este é ainda mais rápido para o que você quer 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 o diretório asdfsss & blah, em seguida, ele será executado blá independentemente de o primeiro comando (dir sdsdf) ter retornado um erro ou não.

Mas se você executá-los com & & entre eles, então se o primeiro for um erro, ele não rodará no segundo. Baseia-se na idéia de álgebra booleana. Se A é verdadeiro e B é verdadeiro, então A AND B é verdadeiro. Então, para descobrir se A e B são verdadeiras, você pode checar A e B, ou você pode ser "preguiçoso" ou eficiente, e apenas checar um e se é falso, você sabe que toda a expressão é falsa. E se é verdade, então você tem que verificar o outro. Então A & B verifica A e só verifica B se tiver que verificar B, portanto só verifica 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 retornar um erro, ele tentará o segundo. Sem dúvida, a própria expressão retornaria verdadeira (sem erro) se ambas forem verdadeiras e falsas (erro).

C:\Users\user>dir asdfsdf
Volume in drive C has no label. Volume Serial Number is B411-D580

Directory of C:\Users\user

File Not Found <---------------- See the output of dir asdfdsds above

C:\Users\user>dir asdfsdf & echo a
Volume in drive C has no label. Volume Serial Number is B411-D580

Directory of C:\Users\user

File Not Found a <--- see the 'echo a' ran

C:\Users\user>dir asdfsdf && echo a
Volume in drive C has no label. Volume Serial Number is B411-D580

Directory of C:\Users\user

File Not Found

C:\Users\user>

Se você fez o diretório filethatexists & & echo a, então você verá o primeiro comando executado com sucesso e, em seguida, ecoará as execuções. Da mesma forma, faça eco de um & & eco b

    
por 01.02.2017 / 09:46

Tags