在命令行中转义文件/文件夹名称中的%

在命令行中转义文件/文件夹名称中的%

有人知道如何%从命令行访问名称中带有 的文件和目录(有效)吗?具体来说,如果有两个 ,%并且它们之间的文本恰好对应于环境变量。

例如,如果有一个名为的文件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 由于某种原因重新启动时 - 环境变量会停止扩展,并且在使用它们的某些地方最终会创建包含环境变量的文件或目录。例如,因为我将 Chromium 配置为将其缓存存储在的子目录中%temp%,所以如果变量扩展,则没问题,但是如果没有扩展,Chromium 会%temp%在其自己的目录下创建一个名为的目录并将缓存(可能会变得很大)存储在那里。我想在我的临时/垃圾文件清理脚本中添加一行以自动删除该文件夹(如果存在),但我无法弄清楚如何在不使用通配符的情况下从命令行访问它。)

答案1

当我测试这个时发生了一些奇怪的事情。

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

由于某种原因,引号似乎会干扰转义。如果我也转义引号,它就会起作用。

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

虽然看上去很丑,但是却很管用。

如果路径中没有空格,则根本不需要引号。

答案2

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 中的制表符补全一起使用。

注意:我只在 Windows Vista 和 Windows 7 上进行了测试。但这也适用于 XP。

相关内容