Yahoo!知恵袋(バッチファイルで反復処理) バッチで配列変数のような添え字を環境変数で使う

またまた、Yahoo!知恵袋での質問にこちらで勝手に答えちゃいます。

バッチファイルで反復処理mario_kinopioさん

バッチファイルで反復処理

バッチファイル(.bat)で複数の環境変数に対して反復処理をさせたいです。
例えばJavaで複数の処理対象にに対して反復処理をする場合、配列を作って

String[] tmp = {"Morning", "Afternoon", "Evening"};
Srting sum="";
for(int i ; i<=3 ; i++){
sum=sum+tmp[i];
}

などとするのが定石だと思うのですが、これをバッチファイルでやりたい時、
set bat1=Morning
set bat2=Afternoon
set bat3=Evening
と定義してfor文かif分+LOOPで回そうとしてもうまくいきません。

うまくいかない例その1
set /a N=1
:LOOP
set bat=%bat%N%% ←%bat*%の変数名をむりやり作ろうとしている:失敗
if "%N%"=="3" (goto EXIT)
set /a N=N+1
goto LOOP
:EXIT

うまくいかない例その2
set /a N=1
:LOOP
set bat0=bat%N% ←bat0に処理対象の変数名を入れる
if defined %bat0% (echo "○")
set bat=%bat%%%bat0%% ←bat0の保持データを変数名として使おうとしている:失敗
if "%N%"=="3" (goto EXIT)
set /a N=N+1
goto LOOP
:EXIT

バッチファイルはかじっている程度で手探りしながら作っているのですが、
万策尽きた感じです。どなたか助言等をお願いします。
XP SP3環境下でのコマンドプロンプトを使ったバッチファイルに関しての回答のみでお願いします。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1421854949

(うまくいかない例その1のような)%環境変数%の入れ子は通常のsetではできません。全くできないかというと、call set 〜 を使うと出来ます。他に環境変数の遅延展開や一旦別のバッチファイルを作成してそれを呼び出す方法(例:「バッチで前日の日付を求める」bat内の「月跨り処理」の所)があります。

で、今回はcall set 〜を使ってXPで動作確認したバッチファイルの例です。

set bat1=Morning
set bat2=Afternoon
set bat3=Evening
set /a N=1
:LOOP
  call set bat=%bat%%%bat%N%%%
  if "%N%"=="3" (goto EXIT)
  set /a N=N+1
goto LOOP
:EXIT

このブログを見てくれないかなぁ。