(Пакет Windows) Перейти к внутри блока if ведет себя очень странно

Если я возьму следующий фрагмент пакетного кода 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
)

Однако это не отвечает на мой первоначальный вопрос.

18
задан coledot 12 December 2011 в 22:31
поделиться