11

当使用 CALL 命令调用批处理脚本中的标签,并使用 GOTO:eof 结束子例程时,从那里会发生什么?它是否返回到子例程的 CALL 所在的位置?还是在调用脚本的位置之后继续?

例如:

ECHO It's for my college fund.
CALL :OMGSUB
ECHO *runs away and cries like a little girl*

:OMGSUB
ECHO Your mom goes to college.
GOTO:eof

ECHO *picks up jewelry box*

在 GOTO:e 之后它将回显哪一行?

4

2 回答 2

12

为什么不直接运行它并亲眼看看呢?我将您的脚本保存到一个名为 foo.bat 的批处理文件中,并将其更改为前面Your mom goes to college.有一个。echo

C:\temp>foo

C:\temp>ECHO It's for my college fund.
It's for my college fund.

C:\temp>CALL :OMGSUB

C:\temp>echo Your mom goes to college.
Your mom goes to college.

C:\temp>GOTO:eof

C:\temp>ECHO *runs away and cries like a little girl*
*runs away and cries like a little girl*

C:\temp>echo Your mom goes to college.
Your mom goes to college.

C:\temp>GOTO:eof

C:\temp>

所以很容易看出,在OMGSUB调用了之后,

  1. 转到文件末尾。
  2. 然后它返回到后面的行CALL :OMGSUB并回显“逃跑”行
  3. 然后它再次呼应了你妈妈的台词
  4. 然后它转到文件末尾并终止
  5. 这条线echo *picks up jewewlry box*永远都达不到。
于 2011-07-18T19:06:30.377 回答
0

GOTO:eof结束OMGSUB批处理文件中的子例程。所以ECHO *runs away and cries like a little girl*接下来执行,但ECHO Your mom goes to college.也会再次执行。

旁注也是评论:

你可以GOTO:eofexit /b. 此外,ECHO Your mom goes to college.将在 之后执行ECHO *runs away and cries like a little girl*,这可能不是预期的。解决方案是添加exitafter ECHO *runs away and cries like a little girl*

于 2015-07-08T01:28:05.860 回答