如果我采取以下Windows批处理代码段,运行它:(Windows批处理)转到内,如果块的行为非常奇怪
echo foo
if 1 == 1 (
echo bar
goto asdf
:asdf
echo baz
) else (
echo quux
)
我所期望的输出是:
foo
bar
baz
但是相反我得到:
foo
bar
baz
quux
如果我注释掉goto asdf
行,它会给出我期望的输出。 echo quux
行应该永远不会被执行,那么为什么goto会导致这种情况发生?
UPDATE:对于它的价值,这里有一个变通方法,正确地做什么,我本来打算:
goto BEGIN
:doit
echo bar
goto asdf
:asdf
echo baz
goto :EOF
:BEGIN
echo foo
if 1 == 1 (
call :doit
) else (
echo quux
)
然而,这并没有回答我原来的问题。
+1好解释,戴夫。较短的一个是:当执行GOTO时,任何* active *'FOR/IF'命令被取消,并且批处理文件从标签开始继续。 – Aacini