Если я возьму следующий фрагмент пакетного кода 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 вызывает это?
ОБНОВЛЕНИЕ: Что бы это ни стоило, вот обходной путь, который правильно делает то, что я изначально предназначено:
goto BEGIN
:doit
echo bar
goto asdf
:asdf
echo baz
goto :EOF
:BEGIN
echo foo
if 1 == 1 (
call :doit
) else (
echo quux
)
Однако это не отвечает на мой первоначальный вопрос.