for文とgoto文

for 文から goto 文で抜け出ることが出来る。
が、抜け出なくても goto しただけで、for 文の機能が無効になるようだ。

@echo off
for /l %%I in (1,1,5) do (
 if %%I==3 goto x
 echo A %%I
:X
 echo B %%I
)

を実行すると、

A 1
B 1
A 2
B 2
B %I

と、制御変数が展開されないばかりか、ループが終了してしまう。

@echo off
for /f "tokens=1-9" %%A in ('dir') do (
 if "%%D"=="." goto X
 echo A %%A
:X
 echo B %%A
)

のような他の形式の for 文でも同様だ。
goto でどこに飛ぶかは関係なく、goto した時点で for 文の外に出たと言う認識のようだ。長い for 文を書くときは注意が必要。goto 文が回避できない時は、do 部をサブルーチン化して回避する。