(Windows-batch) Springen innerhalb der if-block verhält sich sehr seltsam

Wenn ich das folgende Windows-batch-code-snippet und führen Sie es:

echo foo
if 1 == 1 (
    echo bar
    goto asdf
    :asdf
    echo baz
) else (
    echo quux
)

Den Ausgang, den ich erwarten würde ist:

foo
bar
baz

Aber stattdessen bekomme ich:

foo
bar
baz
quux

Wenn ich kommentiere die goto asdf Linie, es gibt die Ausgabe, die ich erwarten. Die echo quux Zeile sollte nie exectuted, also warum ist die Existenz von goto verursacht, dass das passiert?

UPDATE: Für was es Wert ist, hier ein workaround, der das richtig macht, was ich ursprünglich gedacht:

goto BEGIN

:doit
    echo bar
    goto asdf
    :asdf
    echo baz
    goto :EOF

:BEGIN

echo foo
if 1 == 1 (
    call :doit
) else (
    echo quux
)

Aber, dies beantwortet nicht meine ursprüngliche Frage.

InformationsquelleAutor der Frage coledot | 2011-12-12

Schreibe einen Kommentar