Como fazer o Batch-file automaticamente parar em erro

4

Alguém sabe se existe um arquivo de lote do Windows equivalente ao Unix Stop no erro "#! / bin / sh -e"?

( link )

    
por jpmartins 03.07.2010 / 02:47

2 respostas

4

Não há realmente uma boa maneira de fazer o que você deseja, dado o design do shell no Windows (herdado do MS-DOS).

Em geral, o CMD.EXE e o COMMAND.COM continuam a executar arquivos em lote, mesmo diante de erros. Verificar o errorlevel dos programas que você chama é tudo o que você tem para o tratamento de erros. A maioria dos comandos shell malformados serão tratados como programas a serem executados (e, esperançosamente, qualquer programa executado não fará algo ruim).

Erros na sintaxe de construções como if exists ou for farão com que o shell pare de executar um script. Considere:

@echo off
if not exits c:\foo.txt echo C:\foo.txt does not exist
echo Continuing on

Você nunca verá Continuing on porque o interpretador irá bombardear com o erro c:\foo.txt was unexpected at this time. . Infelizmente, não há como interceptar e manipular erros como ocorre com o bash. Quando você acerta um erro como esse, o script pára de funcionar.

Em geral, o tratamento de erros no shell do Windows é muito pouco sofisticado.

    
por 03.07.2010 / 05:42
3

Uma maneira menos discutível de interromper um lote imediatamente após um erro é usar todas as "instruções" como:

copie% UNEXISTING% C: \ || (O arquivo de erro de eco% UNEXISTING% não existe e o EXIT / B 1)

com || o resto o próximo comando na mesma linha é executado somente se o errorlevel do comando anterior for diferente de 0.

    
por 14.04.2012 / 03:06