Batch file 区别于;呼叫:退出,回显“;及;退出,回显“;批处理文件
以下批处理代码让我感到困惑:Batch file 区别于;呼叫:退出,回显“;及;退出,回显“;批处理文件,batch-file,errorlevel,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 及 唯一的区别是第一个使用call,而第二个不使用。另外,“echo”在第二个上不起作用。有人能帮我理解这些问题吗?退出/b n做
@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
及
唯一的区别是第一个使用call,而第二个不使用。另外,“echo”在第二个上不起作用。有人能帮我理解这些问题吗?退出/b n做两件事。它将
errorlevel
设置为n
,然后返回到调用当前例程的例程中的下一条指令
因此,在第一个-调用中:err
设置errorlevel
并返回到echo
,其中显示设置的errorlevel
,然后继续执行:EOF
终止主例程
或
将errorlevel
设置为0后终止主例程
(取决于是否为真/假。)
在第二种情况下,exit
将errorlevel
设置为1001或0(取决于if
为真/假)终止例程,因此处理永远不会到达echo
谢谢Magoo,我想我已经开始知道它是如何工作的了。第一个调用是子例程,退出时返回主例程。而第二个退出主例程(如果不是子例程)。对吗?没错`这是当前的例行程序。如果它是一个子例程,那么回到该例程的调用者——它可能有很多层次。如果它是主程序,那么它是剩下的唯一要终止的程序,所以这就是被终止的程序。
@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