遅延環境変数の展開を利用する際に、ハット記号(^)を使うことでエクスクラメーションマーク(感嘆符)=「!」をエスケープすることができる。
背景
遅延環境変数の展開を利用すると「!」は変数の展開に使うための記号となるため、文字列変数中の「!」が正しく利用できない。
対策
たとえば以下のようなバッチを作成する
@echo off setlocal enabledelayedexpansion set ESCAPED="escaped^!" set UNESCAPED="unescaped!" echo !ESCAPED! echo !UNESCAPED! endlocal
実行すると以下のような結果になり、エスケープできていることがわかる。
>test.bat "escaped!" "unescaped"
まあ、いまどきbatかって気がしますけれども……