【问题标题】:Using CALL for labels in a batch script在批处理脚本中对标签使用 CALL
【发布时间】:2011-10-07 22:49:24
【问题描述】:

当使用 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:eof 之后会回显哪一行?

【问题讨论】:

  • 请参阅robvanderwoude.com/goto.php,了解如何使用标签创建“子例程”以及如何退出批处理而不在子例程中重复这些内容。
  • 您也可以将GOTO:eof 替换为exit /b。此外,ECHO Your mom goes to college. 将在ECHO *runs away and cries like a little girl* 之后执行,这可能不是有意的。解决方案是在ECHO *runs away and cries like a little girl* 之后添加exit

标签: batch-file cmd call subroutine


【解决方案1】:

为什么不直接运行它自己看看呢?我将您的脚本保存到一个名为 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* 行永远无法到达。

【讨论】:

  • 因为为什么不在一个问题中提出它,它得到回答,你可以获得积分,查找它的人可以立即找到并节省一些时间,并且每个人都=快乐? XD 是的,我可以轻松地将其放入批处理脚本中,但为什么不直接将其记录下来呢?谢谢你的回答。我不确定最后一部分,即使在调用它之后它也会重新迭代子例程。
  • Mechaflash,这实际上是微不足道的尝试。我怀疑这是一个很好的问题,很多其他人会偶然发现并乐于找到答案。但我可能会被证明是错误的。
  • 您必须注意,放置在 goto 之后的任何命令都不会被执行,例如您的 ECHO 拿起首饰盒。为了避免这些混淆,我建议不要使用 goto :eof 而是使用 exit /b。
  • C:\>HELP CALL 应该会给你更多信息。
【解决方案2】:

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

旁注也是评论:

您可以将GOTO:eof 替换为exit /b。此外,ECHO Your mom goes to college. 将在ECHO *runs away and cries like a little girl* 之后执行,这可能不是有意的。解决方案是在ECHO *runs away and cries like a little girl* 之后添加exit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多