Частым методом обработки ошибок в командных сценариях Windows является использование таких вещей, как:
if errorlevel 1 ...
или if %errorlevel% neq 0 ...
. Часто требуется, чтобы код обработки ошибок сохранял ERRORLEVEL.
Я считаю, что все внешние команды всегда будут приводить к тому, что ERRORLEVEL будет установлено какое-то значение, поэтому код обработки ошибок должен сохранить ERRORLEVEL в переменной среды до выполнения внешней команды.
Но как насчет внутренних команд? Проблема в том, что некоторые внутренние команды очищают ERRORLEVEL до 0, когда они преуспевают, а некоторые нет. И я не могу найти документацию, определяющую, какие команды делают что.
Итак, вопрос: , какие внутренние команды очищают ERRORLEVEL до 0 при успешном завершении? Это не общий вопрос о возвращенных кодах ERRORLEVEL, но строго о результатах успеха.
Есть такие сообщения, как Что является самым простым способом для reset ERRORLEVEL до нуля? и командные файлы Windows:. bat vs .cmd?, которые дают частичные ответы. Но я никогда не видел исчерпывающего списка.
Примечание: Мне это любопытно в течение многих лет. Поэтому я, наконец, решил провести кучу экспериментов и дать окончательный ответ. Я отправляю этот Q & A, чтобы поделиться тем, что нашел.