成功后哪個cmd.exe內部命令將ERRORLEVEL清除為0?在Windows批處理腳本中處理錯誤的常用方法是使用if errorlevel 1 ...或等if %errorlevel% neq 0 ...。通常,人們希望錯誤處理代碼保留ERRORLEVEL。我相信所有外部命令總是會導致ERRORLEVEL被設置為某個值,因此錯誤處理代碼必須在執行外部命令之前在環境變量中保留ERRORLEVEL。但內部命令怎么樣?問題是,一些內部命令在成功時將ERRORLEVEL清除為0,而有些則沒有。而且我找不到任何指定哪些命令做什么的文檔。所以問題是,哪些內部命令成功后將ERRORLEVEL清除為0?這不是關于返回的ERRORLEVEL代碼的一般問題,而是關于成功結果的嚴格問題。注意: 多年來我一直很好奇。所以我最終決定進行一系列實驗并得出一個明確的答案。我發布此問答來分享我發現的內容。
2 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
您對CALL命令的描述不完整:
CALL:如果CALLed命令沒有設置它,則清除ERRORLEVEL。示例:call echo OK。
檢查這個小例子:
@echo off
call :setTwo
echo Set two: %errorlevel%
call :preserve
echo Preserve: %errorlevel%
call echo Reset
echo Reset: %errorlevel%
call :subNotExists 2> NUL
echo Sub not exist: %errorlevel%
goto :EOF
:setTwo
exit /B 2
:preserve
echo Preserve
exit /B
輸出:
Set two: 2
Preserve
Preserve: 2
Reset
Reset: 0
Sub not exist: 1
CALL 描述應該說是這樣的:
CALL:如果CALLed命令沒有設置它,則清除ERRORLEVEL。示例:call echo OK,但如果被調用的命令是子例程,則它會保留先前的ERRORLEVEL。如果被調用的子程序不存在,則將ERRORLEVEL設置為1。
添加回答
舉報
0/150
提交
取消