Quais comandos internos do cmd.exe limpam ERRORLEVEL para 0 em caso de êxito?
Um método frequente para lidar com erros nos scripts em lote do Windows é usar coisas comoif errorlevel 1 ...
ouif %errorlevel% neq 0 ...
. Muitas vezes, deseja-se que o código de tratamento de erros preserve o ERRORLEVEL.
Acredito que todos os comandos externos sempre resultarão em ERRORLEVEL sendo definido com algum valor; portanto, o código de tratamento de erros deve preservar o ERRORLEVEL em uma variável de ambiente antes de executar um comando externo.
Mas e os comandos internos? O problema é que alguns comandos internos limpam ERRORLEVEL para 0 quando são bem-sucedidos e outros não. E não consigo encontrar nenhuma documentação especificando quais comandos fazem o quê.
Então a questão é:quais comandos internos limpam o ERRORLEVEL para 0 após o sucesso? Isto énão uma pergunta geral sobre códigos ERRORLEVEL retornados, mas estritamente sobre resultados de sucesso.
Existem posts comoQual é a maneira mais fácil de zerar ERRORLEVEL? eArquivos em lote do Windows: .bat vs .cmd? que dão respostas parciais. Mas nunca vi uma lista abrangente.
Nota: Eu tenho curiosidade sobre isso há anos. Então, finalmente decidi fazer um monte de experimentos e criar uma resposta definitiva. Estou postando estas perguntas e respostas para compartilhar o que encontrei.