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 部をサブルーチン化して回避する。