遅延環境変数の展開を利用する際に、エクスクラメーションマーク(感嘆符)をエスケープする

遅延環境変数の展開を利用する際に、ハット記号(^)を使うことでエクスクラメーションマーク(感嘆符)=「!」をエスケープすることができる。

背景

遅延環境変数の展開を利用すると「!」は変数の展開に使うための記号となるため、文字列変数中の「!」が正しく利用できない。

対策

たとえば以下のようなバッチを作成する

@echo off
setlocal enabledelayedexpansion

set ESCAPED="escaped^!"
set UNESCAPED="unescaped!"

echo !ESCAPED!
echo !UNESCAPED!

endlocal

実行すると以下のような結果になり、エスケープできていることがわかる。

>test.bat

"escaped!"
"unescaped"

まあ、いまどきbatかって気がしますけれども……