いろきゅうのブログ

はてなダイアリーから移行中…

コマンドプロンプトで % と ! のエスケープの方法がわからない

ファイル名に % とか ! とかある時に微妙に困ってます。


例えば、ディレクトリ構成・ファイルの内容が次のようになってたとします。

ディレクトリ
%CD%.txt
a.bat

■%CD%.txt の内容
kashira

■a.bat
type %1

単純ですね。 a.bat の第1引数で与えられたファイルを単に表示するだけです。



んじゃぁ。"%CD%.txt" を a.bat で表示しようとした際、どーすりゃいいのか!…ってのがさっぱりだったりします。

c:\c>a.bat %CD%.txt
c:\c>type c:\c.txt
指定されたファイルが見つかりません。

# %% にしてエスケープしてみる
c:\c>a.bat %%CD%%.txt
c:\c>type %c:\c%.txt
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

# ダブルコーテーションで囲ってみる?
C:\c>a.bat "%CD%.txt"
C:\c>type "C:\c.txt"
指定されたファイルが見つかりません。

# \でエスケープだ!
C:\c>a.bat \%CD\%.txt
C:\c>type \%CD\%.txt
指定されたパスが見つかりません。

さて、どうしたもんか…



ファイル名に % とか ! とかは使わないはナシで(ぉ

早速反応が!

http://twitter.com/rozen_acgin/status/87427675836252160
C:\c>a.bat ^%CD^%.txt
C:\c>type %CD%.txt
kashira

おおお!すごい! これは初めて知った! これは thx! です! twitter すごい!


あとは、このエスケープを自動化できれば…。例えばこんな感じ

ディレクトリ
%CD%.txt
tenshi.txt
list.txt
a.bat

■list.txt の中身 // つまりはファイル名一覧
%CD%.txt
tenshi.txt



■ 一度に表示してみる
C:\c>for /f "delims=" %f in (list.txt) do call a.bat %f

C:\c>call a.bat %CD%.txt
C:\c>type C:\c.txt
指定されたファイルが見つかりません。
C:\c>call a.bat tenshi.txt
C:\c>type tenshi.txt
misya

…あぁまぁですよねー(苦笑 orz

list.txt 内の %CD%.txt を ^%CD^%.txt にしたら正常に表示できたので、bat に流す前に何とかしてエスケープしないとダメっぽいですなぁ。 むむむ…