"呼叫:退出,回声"之间的区别和"退出,回声"在批处理文件中

时间:2015-01-02 04:33:02

标签: batch-file errorlevel

我对以下批处理代码感到困惑:

@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"不适用于第二个。任何人都可以帮我理解这些问题吗?

1 个答案:

答案 0 :(得分:1)

exit /b n做了两件事。它将errorlevel设置为n,然后返回到调用当前例程的例程中的下一条指令。

所以在第一个 - call :errerrorlevel并返回显示echo设置的errorlevel,然后转到:EOF终止主例程

终止主例程,将errorlevel设置为0

(取决于if是真/假。)

在第二个例程中,exiterrorlevel设置为1001或0(取决于if为真/假),例程终止,因此处理永远不会到达{ {1}}。