LoginSignup
5
3

More than 5 years have passed since last update.

Windowsのバッチファイルでファイル名に!(感嘆符)があるときの処理

Posted at

やりたいこと

Windowsのバッチファイルで、ファイルを開いて中を読むという処理をしたかった。

困ったこと

ファイル名(あるいはファイルのパス)に!(エクスクラメーションマーク、感嘆符、ビックリマーク)があると「ファイルが存在しません」になってしまう。

調べたこと

「バッチファイル ファイル名 ビックリマーク」などのワードで検索。

バッチでビックリマーク|SEばしり

を見つけて、

調べてみると、バッチ内の変数扱いとして、展開してから実行する遅延のやつがいる。
こいつの予約文字としてエクスクラメーションをつかう。
今回対象のファイル名にビックリマークがあるためイレギュラーな動きになっていた。

とあって、続いて

ファイル名から感嘆符(エクスクラメーション)を取り除くバッチファイル... - 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のパターンだったから。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3