如果我採取以下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