如何退出批处理功能?

时间:2018-01-13 00:40:23

标签: batch-file

所以我想做这样的事情:

@echo off
echo Before
call :test
echo After
pause

:test
echo I'm in test!
:end

echo I shouldn't be here...

这样在说Before之后和After之前就会调用测试。但是,在说I shouldn't be here之前,它只是说After!现在,它不一定是这个例子中的问题,但是当我有一大堆功能时,它可能是一个很大的问题。谁能帮帮我吗?谢谢! :)

1 个答案:

答案 0 :(得分:3)

批处理没有“部分”,“功能”,“程序”或“段落”的概念。标签只是一个参考点。当达到标签时,执行不会停止,它会一直延续,直到达到文件结尾, CALL GOTO 或<强> EXIT 即可。这就是为什么你得到你提到的信息 - 以及为什么I'm in test!和“流氓”消息出现在你的pause之后(如果你通过“点击”执行批处理就不会看到这个消息它)

完成主线后需要goto :eof,否则执行将继续执行子程序代码。 :EOFCMD理解为end of file的预定义标签。冒号必需

您可以使用goto :eof来终止子例程(到达文件结尾会终止例程并返回到call之后的语句)或者您可以使用exit或{{ 1}}如文档中所述(来自提示符的se exit /b [n]

使用exit /?的缺点是,如果在例程未被exit编辑时执行,它将终止cmd实例 - 即。它是主要例程的一部分 - 因此,call更受欢迎。