如何退出批处理功能?

Mat*_*ias 3 batch-file

所以我想做这样的事情:

@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!现在,在这个示例中并不一定是问题,但是当我有很多功能时,这可能是一个问题。谁能帮帮我吗?谢谢!:)

Mag*_*goo 5

批处理没有“节”,“功能”,“程序”或“段落”的概念。标签只是参考点。到达标签时,执行不会停止,只是简单地逐行继续,直到到达文件结尾,CALLGOTOEXIT为止。这就是为什么您收到提到的消息的原因,以及为什么I'm in test!在您的消息之后出现和“ rogue”消息的原因pause(如果您通过单击“批处理”来执行该批处理,则看不到)

您需要goto :eof在完成主线之后执行,否则将通过子例程代码继续执行。:EOF是预先定义的标签,CMD用来理解end of file。冒号是必需的

您可以使用goto :eof来终止子例程(到达文件末尾会终止该例程并返回后的语句call),也可以使用exitexit /b [n]按照文档中的说明进行操作(exit /?提示中的内容)。

using的缺点exit是,cmd如果在未call编辑例程的情况下执行该例程,则它将终止该实例,即。它是主要程序的一部分-因此,goto :eof它更受欢迎。