【发布时间】:2014-06-07 12:16:50
【问题描述】:
我正在玩一些批处理文件并且遇到了一些问题。根据一个网站:
要退出批处理脚本文件或退出子例程,请指定 GOTO:eof this 将控制转移到当前批处理文件的末尾或末尾 的当前子程序。
那么,考虑到这个定义,为什么这两个代码的某些部分不能执行:
第一个:
:Loop
echo I am in a loop.
GOTO:eof
Echo Hello
Goto Loop
echo Finish
pause
唯一打印出来的是:我在一个循环中。没有其他东西打印出来。
第二个:
Echo Hello
Goto Loop
echo Finish
pause
:Loop
echo I am in a loop
GOTO:eof
echo Finish 不打印。为什么?
另外,您能简单说明一下 Goto 使用和子程序之间的区别吗?
谢谢
更新:在 Google 上搜索其他内容时,我发现了这个:Using CALL for labels in a batch script,我猜它回答了这个问题,但我仍然需要详细说明,比如
1) 何时使用 GOTO,何时使用 Call? (我想这与我上面关于子程序和 GOTO 之间差异的问题有关)
2)对于第一个代码,为什么会出现句子:“I am in a loop”。打印/得到回显,当它从未被调用/指示执行时?
2b) 该部分如何仅在被调用时才执行?
更新 2:
好吧,我怎样才能让这样的事情起作用?
@echo off
echo main line
call :loop
call :another
call :loop
echo main line again
goto :eof
:loop
echo inside the subroutine
:another
echo hi!
【问题讨论】:
-
为什么你写的代码却说“我在一个循环中”,而你却不是?!当您已经在文件末尾时,编写 Goto :eof 没有任何好处
-
您需要停顿很多次并自己弄清楚发生了什么,因为在您的 cmets 中,您正在对正在发生的事情做出一些非常疯狂的假设。暂停一下,预测会发生什么,弄清楚它在做什么。您甚至在代码中包含疯狂的假设,例如调用标签循环,建议您假设它会循环。你真的需要做一些故障排除和分解。你甚至会问为什么当你有一个标签和一些代码时,它会运行代码。编写一个简单的标签和代码程序,你会学到更多。
-
-1 您刚刚写道,您的批处理文件中有另一行(一些 cmd /k)导致了一些奇怪的行为,您声称您认为自己得到了但您不认为它是很重要,所以你错过了。至少你是诚实的,但这个问题根本没有很好地提出(或经过深思熟虑)
标签: windows batch-file cmd dos