やりたい事
バッチファイルを触ってて、setlocal
内でセットされてる値を外に渡したくなった。
setlocalの役割
バッチファイルでは、setlocal
とendlocal
に挟まれた範囲で、環境変数のローカル化が行えます。
これは通常、この範囲外には影響を与えません(外からは見えません)
localvar.bat
@echo off
setlocal
set var=外から見えない
echo 内側:%var%
endlocal
echo 外側:%var%
goto :EOF
実行結果
内側:外から見えない
外側:
外から値を使う
しかし、外側からその値が欲しい場合があります。
そこで、&&
(論理積)を使います。
externalvar.bat
@echo off
setlocal
set var=外から見える
echo 内側:%var%
rem endlocalとsetを&&で繋ぐ
endlocal && set var=%var%
echo 外側:%var%
goto :EOF
実行結果
内側:外から見える
外側:外から見える
これでendlocal
の後でも、内側で設定した値を使えるようになりました。
別バッチから使う
上記のやり方はsetlocal
の外側でset
しているため、externalvar.bat
を実行後、別バッチファイルからもこの値を参照することも可能になります(実行中のプロンプトを閉じない場合)
other.bat
@echo off
echo 別バッチ:%var%
rem 未クリアだと、localvar.bat再実行時にも見える
set var=
goto :EOF
実行結果
別バッチ:外から見える
参考記事