在批处理脚本中使用CALL标记

Mec*_*ash 12 cmd batch-file call subroutine

当使用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*
Run Code Online (Sandbox Code Playgroud)

在GOTO之后:eof哪条线接下来会回响?

dcp*_*dcp 11

为什么不运行它并亲眼看看?我将你的脚本保存到一个名为foo.bat的批处理文件中,然后我改变了你的妈妈上大学就Your mom goes to college.在前面.

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>
Run Code Online (Sandbox Code Playgroud)

所以很容易看到它echo被称为它之后

  1. 转到文件末尾.
  2. 然后它返回到右侧的线,然后回到OMGSUB"逃跑"线
  3. 然后它再次回应你的妈妈系列
  4. 它会到达文件末尾并终止
  5. 回声拾起jewewlry盒线从未到达.

  • 因为为什么不在一个问题中提出问题,让它得到答案,你可以获得积分,看起来的人可以立即找到并节省一些时间,每个人都=快乐?XD是的,我可以很容易地把它放在一个批处理脚本中,但为什么不把它记录下来呢?谢谢你的回答.我不确定最后一部分,它甚至在调用之后重新遍历子程序. (5认同)
  • Mechaflash,实际上,尝试这是微不足道的.我怀疑这是一个很好的问题,很多人会偶然发现并乐于找到答案.但我可能被证明是错的. (2认同)
  • 你必须注意,任何放在goto之后的命令都不会被执行,就像你的ECHO*拿起珠宝盒*一样.为了避免这些混淆,我建议永远不要使用goto:eof并使用exit/b代替. (2认同)
  • C:\> HELP CALL应该会为您提供更多信息. (2认同)