環境変数に改行文字をセット
^ による行の継続を試している時に、環境変数に改行を含んだ文字列をセットできることに気づいた。
set AA=123^ 456
のように間に空行をはさむと、AA に 123 改行 456 がセットされる。
set AAA=123^ 456^ 789
のようにすれば何行でも入る。ただし、この値を表示させようとして、echo %AA% では駄目である。1行目の 123 しか表示されないし、その後に何を書いても無視される。
echo %AA% xyz & date/t ⇒ 123 だけが表示
表示させるためには、遅延展開を有効にして、
echo !AA! xyz & date/t ⇒ 123 改行 456 XYZ 改行 日付 が表示
部分文字列も同様に、%による展開だと改行で途切れるが、改行を飛び越えればOK。
echo %AA:~1% ⇒ 23 が表示 echo %AA:~4% ⇒ 456 が表示(改行はCR+LFの2文字でなく1文字のようだ) echo !AA:~1! ⇒ 23 改行 456 が表示
次に、命令文としての実行はどうか?
set X=echo 1^ echo 2
として、
%X% xyz & date/t ⇒ 1 のみが表示(2行目やxyzやdate/tは無視) !X! xyz & date/t ⇒ 1 改行 echo 2 xyz 改行 日付 が表示(echo 2は命令でなく最初のechoのパラメータになっている)
つづく