我对以下批处理代码感到困惑:
@echo off
Setlocal EnableDelayedExpansion
set rootpath=%1
if '%1'=='' (
call :ERR
REM Exit /b 1001
) else (
exit /b 0
)
echo %errorlevel%
goto :EOF
:ERR
Exit /b 1001
和
@echo off
Setlocal EnableDelayedExpansion
set rootpath=%1
if '%1'=='' (
REM call :ERR
Exit /b 1001
) else (
exit /b 0
)
echo %errorlevel%
goto :EOF
:ERR
Exit /b 1001
唯一的区别是第一个使用呼叫但第二个没有。此外," echo"不适用于第二个。任何人都可以帮我理解这些问题吗?
答案 0 :(得分:1)
exit /b n
做了两件事。它将errorlevel
设置为n
,然后返回到调用当前例程的例程中的下一条指令。
所以在第一个 - call :err
集errorlevel
并返回显示echo
设置的errorlevel
,然后转到:EOF
终止主例程
或强>
终止主例程,将errorlevel
设置为0
(取决于if
是真/假。)
在第二个例程中,exit
将errorlevel
设置为1001或0(取决于if
为真/假),例程终止,因此处理永远不会到达{ {1}}。