やりたいこと
Windowsのバッチファイルで、ファイルを開いて中を読むという処理をしたかった。
困ったこと
ファイル名(あるいはファイルのパス)に!(エクスクラメーションマーク、感嘆符、ビックリマーク)があると「ファイルが存在しません」になってしまう。
調べたこと
「バッチファイル ファイル名 ビックリマーク」などのワードで検索。
を見つけて、
調べてみると、バッチ内の変数扱いとして、展開してから実行する遅延のやつがいる。
こいつの予約文字としてエクスクラメーションをつかう。
今回対象のファイル名にビックリマークがあるためイレギュラーな動きになっていた。
とあって、続いて
ファイル名から感嘆符(エクスクラメーション)を取り除くバッチファイル... - Yahoo!知恵袋
で解決。
実験してみた
バッチファイルのコード
@echo off
pushd %0\..
set filename=ファイル名!!!
::遅延環境変数 ON -> 変数アクセスに!を使うので!が予約語になる
setlocal enabledelayedexpansion
echo ■1: %filename%
::遅延環境変数 OFF -> !が予約語では無くなる
setlocal disabledelayedexpansion
echo ■2: %filename%
:: ONにして遅延環境変数として見たらどうなるか
setlocal enabledelayedexpansion
echo ■3: !filename!
:: OFFにして遅延環境変数として見たらどうなるか
setlocal disabledelayedexpansion
echo ■4: !filename!
pause
exit
実行結果
■1: ファイル名
■2: ファイル名!!!
■3: ファイル名!!!
■4: !filename!
私が困ったのは■1のパターンだったから。