web-dev-qa-db-ja.com

コマンドラインでfile- / folder-namesの%をエスケープする

コマンドラインから名前(有効)に%が含まれているファイルやディレクトリにアクセスする方法はありますか?具体的には、2つの%があり、それらの間のテキストがたまたま環境変数に対応している場合。

たとえば、C:\blah\%temp%.txtというファイルまたはC:\Program Files\%temp%\というフォルダがある場合、変数が展開されるため、次のいずれも機能しません。

> dir "c:\blah\%temp%.txt"
> dir "c:\blah\^%temp^%.txt"
> dir "c:\blah\%%temp%%.txt"
> dir "c:\blah\\%temp\%.txt"

> dir "c:\program files\%temp%"
> dir "c:\program files\^%temp^%"
> dir "c:\program files\%%temp%%"
> dir "c:\program files\\%temp\%"


ワイルドカードの使用は機能しますが、ファイル/フォルダーを一意に選択するわけではなく、他のものが含まれる場合があります。

> dir "c:\blah\?temp?.txt"        (also shows ztempz.temp, 1tempa.txt, etc.)
> dir "c:\program files\?temp?"   (likewise)



(これはイライラすることです。通常、何らかの理由でExplorerを再起動すると、環境変数の展開が停止し、環境変数が使用される場所によっては、環境変数を含むファイルまたはディレクトリが作成されるためです。たとえば、キャッシュを%temp%のサブディレクトリに保存するようにChromiumを構成したため、変数が展開されれば問題ありませんが、展開されない場合、Chromiumは独自のディレクトリの下に%temp%というディレクトリを作成します。一時ファイル/ジャンクファイルのクリーニングスクリプトに行を追加して、そのフォルダが存在する場合は自動的に削除したいのですが、コマンドからアクセスする方法がわかりません-ワイルドカードに頼らずに行。)

2
Synetech

私がこれをテストしたとき、何か奇妙なことが起こりました。

dir "C:\Program Files\^%temp^%"

何らかの理由で、引用符がエスケープを妨害しているようです。 引用符もエスケープすると機能します。

dir ^"C:\Program Files\^%temp^%^"

見た目は醜いですが、機能します。

パスにスペースがない場合、引用符はまったく必要ありません。

8
Bob
del c:\a\file^%named^%bob

証明:

C:\lolnope>edit bob

C:\lolnope>move bob bob^%was^%wub
        1 file(s) moved.


C:\lolnopen>dir "bob%was%wub"
 Volume in drive C is OS
 Volume Serial Number is CC34-08D9

 Directory of C:\lolnope

04/06/2012  08:18 PM                15 bob%was%wub
               1 File(s)             15 bytes



C:\lolnope>del bob^%was^%wub

C:\lolnope>dir bob^%was^%wub
 Volume in drive C is OS
 Volume Serial Number is CC34-08D9

 Directory of C:\lolnope

File Not Found

ファイル名を二重引用符で囲むこともできます。これは、CMD.EXEのタブ補完で機能するようです。

注:私はWindowsVistaとWindows7でのみテストしました。これはXPでも機能するはずです。

0
Jarrod Wageman