所以我想做这样的事情:
@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
!现在,它不一定是这个例子中的问题,但是当我有一大堆功能时,它可能是一个很大的问题。谁能帮帮我吗?谢谢! :)
答案 0 :(得分:3)
批处理没有“部分”,“功能”,“程序”或“段落”的概念。标签只是一个参考点。当达到标签时,执行不会停止,它会一直延续,直到达到文件结尾, CALL , GOTO 或<强> EXIT 即可。这就是为什么你得到你提到的信息 - 以及为什么I'm in test!
和“流氓”消息出现在你的pause
之后(如果你通过“点击”执行批处理就不会看到这个消息它)
完成主线后需要goto :eof
,否则执行将继续执行子程序代码。 :EOF
是CMD
理解为end of file
的预定义标签。冒号必需。
您可以使用goto :eof
来终止子例程(到达文件结尾会终止例程并返回到call
之后的语句)或者您可以使用exit
或{{ 1}}如文档中所述(来自提示符的se exit /b [n]
。
使用exit /?
的缺点是,如果在例程未被exit
编辑时执行,它将终止cmd
实例 - 即。它是主要例程的一部分 - 因此,call
更受欢迎。