所以我想做这样的事情:
@echo off
echo Before
call :test
echo After
pause
:test
echo I'm in test!
:end
echo I shouldn't be here...
Run Code Online (Sandbox Code Playgroud)
这样,它可以在说完之后再说Before之前调用test After。但是,它总是只I shouldn't be here说一说After!现在,在这个示例中并不一定是问题,但是当我有很多功能时,这可能是一个问题。谁能帮帮我吗?谢谢!:)
批处理没有“节”,“功能”,“程序”或“段落”的概念。标签只是参考点。到达标签时,执行不会停止,只是简单地逐行继续,直到到达文件结尾,CALL,GOTO或EXIT为止。这就是为什么您收到提到的消息的原因,以及为什么I'm in test!在您的消息之后出现和“ rogue”消息的原因pause(如果您通过单击“批处理”来执行该批处理,则看不到)
您需要goto :eof在完成主线之后执行,否则将通过子例程代码继续执行。:EOF是预先定义的标签,CMD用来理解end of file。冒号是必需的。
您可以使用goto :eof来终止子例程(到达文件末尾会终止该例程并返回后的语句call),也可以使用exit或exit /b [n]按照文档中的说明进行操作(exit /?提示中的内容)。
using的缺点exit是,cmd如果在未call编辑例程的情况下执行该例程,则它将终止该实例,即。它是主要程序的一部分-因此,goto :eof它更受欢迎。