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

鴻蒙傳說
TA貢獻1865條經(jīng)驗 獲得超7個贊
您對CALL命令的描述不完整:
CALL:如果CALLed命令沒有設(shè)置它,則清除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命令沒有設(shè)置它,則清除ERRORLEVEL。示例:call echo OK,但如果被調(diào)用的命令是子例程,則它會保留先前的ERRORLEVEL。如果被調(diào)用的子程序不存在,則將ERRORLEVEL設(shè)置為1。
添加回答
舉報
0/150
提交
取消