« ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。 | トップページ | FORコマンドの出力リダイレクト »

2009年3月 6日 (金)

ファイル名に!を使うと、環境変数の遅延展開と相性が悪い。

もし、ファイル名に!があると、バッチ変数(%1など)やFOR変数(%%iなど)の展開でファイル名中の!が遅延展開されちゃいます。
これは、"~"では、エスケープできません。

これを回避するには、バッチ変数やFOR変数の展開時に遅延展開を無効にすることです。
しかし、遅延展開はSETLOCAL抜きに切り替えができません。
しかも、SETLOCALのネストには上限もあります。

また、バッチファイルの遅延展開の初期状態は呼び出し元に依存します。
なので、バッチファイルの先頭に、SETLOCAL DISABLEDELAYEDEXPANSION を必ず入れておくことを推奨します。

« ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。 | トップページ | FORコマンドの出力リダイレクト »