カレントディレクトリの局所化 †setlocal/endlocal の間では、環境変数だけでなくカレントディレクトリも局所化される。つまり、cd や pushd でカレントディレクトリを移動しても、endlocal で setlocal 時点の場所に戻る。 環境変数値の外への持ち出し †setlocal/endlocal の外へ内部の環境変数の値を持ち出したいケースがある。 この場合、 set A=XYZ set B=PQR setlocal set A=123 set B=456 ..... endlocal&set A=%A% echo %A% %B% → 123 PQR のように、endlocalとsetをマルチステートメント化する事で実現できる。 % による環境変数の展開は、構文解析に先立って行われるため、まず展開が行われ、 次にマルチステートメントが認識され、次に endlocal が実行される。次に set の実行だがその時点ではすでに set の右辺は展開済みであるので、結局 set では endlocal 実行前の環境変数の値がセットされることになる。 |