como posso fazer meu arquivo .bat continuar após um erro

30

Eu tenho um arquivo .bat no Windows que faz três coisas

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Às vezes, o cmd1 pode falhar e tudo bem, eu gostaria de continuar e executar o cmd2 e o cmd3. Mas meu bastão para no cmd1. Como posso evitar isso?

Atualização para maior clareza - esses não são outros arquivos .bat, são comandos exe. Espero que não precise criar uma árvore de arquivos .bat apenas para conseguir isso.

ConfusedNoob
fonte
Você deve poder iniciar o comando usando cmd /C.
Der Hochstapler
1
Você precisa mostrar um exemplo de código específico do que não está funcionando. Arquivos em lote normalmente não terminam automaticamente se um comando falhar com um erro. Os arquivos em lote terminam se houver um erro de sintaxe. Se o seu código está saindo com um erro exe, deve haver lógica no código que está causando esse comportamento.
dbenham

Respostas:

18

Outra opção é usar o amperstand ( &)

cmd1 & cmd2 & cmd3

Se você usar um duplo, ele continuará apenas se o comando anterior for concluído com êxito ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Se você usar um pipe duplo ( ||), ele executará o próximo comando apenas se o anterior for concluído com um código de erro ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3

O canadense Luke REINSTATE MONICA
fonte
Posso fazer isso ao passar argumentos também? Eu apenas tentei e não parecia funcionar.
ConfusedNoob
@ConfusedNoob eu faço o tempo todo ... Eu tenho um CHKDSKcomando, com argumentos, que funciona. Eu digito check D: & check E: & check F:e funciona. Os argumentos do arquivo BAT incluem as /perf /f /r /b /scanopções
Canadian Luke REINSTATE MONICA
2
um bom! me trouxe uma idéia de como implementar várias tentativas: cmd || cmd || ... executará o próximo cmd até ser bem
iTake 11/11
1
Isso torna os scripts longos ilegíveis, não há outra maneira?
janeiro
1
@CanadianLuke Bem, o lote é a estrutura de lote do Windows. Como você executa centenas de comandos de maneira não interativa? Existe uma abordagem melhor no shell de energia? É pior mudar para lá?
janeiro
11

Presumindo que os cmds são outros arquivos .bat, os comandos são os seguintes:

 call cmd1
 call cmd2
 call cmd3
mdpc
fonte
10

Isso funcionou para mim:

cmd.exe /c cmd1 arg1
cmd2
...

Isso é usado cmd.exepara executar o comando em uma nova instância do interpretador de comandos do Windows, para que um comando com falha não interrompa o script em lote. O /csinalizador diz ao intérprete para terminar assim que o comando terminar de executar.

cmd2executa mesmo se o primeiro comando falhar. Consulte cmd /?no prompt de comando do Windows para obter mais informações.

Joseph238
fonte