给出以下代码:
@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
我在这里做错了什么?
答案 0 :(得分:50)
如果要从CALL返回,可以使用带/ 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
答案 1 :(得分:15)
行CALL :SUB_B
返回,脚本进入下几行:
:SUB_A # no effect from this one
ECHO In SUB_A # prints message
如果您希望它停在那里,您需要在通话后插入GOTO:EOF
。
批处理文件不是结构化程序;它们是一系列指令,带有一些类似BASIC的GOTO和CALL功能。
答案 2 :(得分:3)
在您的行CALL :SUB_B
之后,批处理文件会转到SUB_A。如果你不想要它,你需要在那里放一个GOTO
行。