Batch file 批处理文件中的子例程
给定以下代码:Batch file 批处理文件中的子例程,batch-file,Batch File,给定以下代码: @Echo off ECHO Start ECHO Calling SUB_A CALL :SUB_A ECHO Calling SUB_B CALL :SUB_B :SUB_A ECHO In SUB_A GOTO:EOF :SUB_B ECHO In SUB_B GOTO:EOF ECHO End 我预计这一产出: Start Calling SUB_A In SUB_A Calling SUB_B In SUB_B End 但我明白
@Echo off
ECHO Start
ECHO Calling SUB_A
CALL :SUB_A
ECHO Calling SUB_B
CALL :SUB_B
:SUB_A
ECHO In SUB_A
GOTO:EOF
:SUB_B
ECHO In SUB_B
GOTO:EOF
ECHO End
我预计这一产出:
Start
Calling SUB_A
In SUB_A
Calling SUB_B
In SUB_B
End
但我明白了:
Start
Calling SUB_A
In SUB_A
Calling SUB_B
In SUB_B
In SUB_A
我在这里做错了什么?在你的第
行调用:SUB_B
之后,批处理文件会转到SUB_A。如果你不想,你需要在那里放一行转到行。第行调用:SUB_B
返回,脚本继续到下几行:
:SUB_A # no effect from this one
ECHO In SUB_A # prints message
如果您希望呼叫停止,则需要在呼叫后插入一个GOTO:EOF
批处理文件不是结构化程序;它们是一系列指令,具有一些基本功能,如转到和调用。如果要从调用返回,请使用带/B参数的EXIT命令(因为只有“EXIT”将终止批处理文件)
例如:
CALL :SUB_ONE
CALL :SUB_TWO
GOTO :EOF
:SUB_ONE
ECHO Hello from one
EXIT /B
:SUB_TWO
ECHO Hello from two
EXIT /B
:EOF
我发现这比goto:EOF
更可取,因为您可以添加一个返回值作为ERRORLEVEL:exit/B%RetVal%
一个注释-您不应该定义EOF
标签<代码>转到:EOF
开箱即用。还请注意,您正在调用:EOF
,您只能定义EOF
,该函数将由GOTO-EOF
调用。需要在“调用”之后和“子例程”名称之前使用冒号。我以前从未使用过它们,但在这里使用过,而且在那之后它就起作用了。