setlocalしたスクリプトから外部の環境変数をセット

setlocalすると、スクリプト実行後の環境変数にセットするには、endlocalのあとでセットするしかない。
しかしセットしたい値はローカル変数に入っているので、endlocalの後では参照できない。
endlocalの後までローカル変数を持ち越す手段を講じる必要がある。

for の制御変数のスコープはdoのあとの文もしくはブロックであり、
setlocal/endlocalの影響を受けない。つまりローカル変数でない。
したがって、endlocalの前に、ローカル変数値をfor制御変数にセットしてendlocalの外で使う。

また、その後でまたsetlocalしたい場合、最初のsetlocal〜endlocalのスコープとは独立なので
最初のスコープのローカル変数を参照することは出来ない。スコープをまたがってのローカル変数の
引継ぎにもfor制御変数を使うことが出来る。

setlocal
set A=local
set B=result
for /f "tokens=*" %%X in ("%A%") do (    ローカル変数の値を制御変数にセット
 for /f "tokens=*" %%Y in ("%B%") do (
  endlocal
  set OUT=%%Y         グローバルな環境変数へのセット                      
  setlocal
  set A=%%X           スコープをまたがったローカル変数の引継ぎ
  )
)
echo %A%

追記:
もっといい方法があるので、この項、obsolete。