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.