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

Syn*_*ech 3 windows command-line environment-variables filenames escape-characters

有没有人可以%从命令行访问名称中包含 a 的文件和目录(有效)?具体来说,如果有两个%'s 并且它们之间的文本恰好对应于一个环境变量。

例如,如果有一个名为 的文件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\%"
Run Code Online (Sandbox Code Playgroud)


使用通配符会起作用,但不会唯一地选择文件/文件夹,并且可能包括其他文件/文件夹:

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



(这令人沮丧,因为时不时——通常是当 Explorer 因任何原因重新启动时——环境变量停止扩展,并且某些使用它们的地方最终会创建包含环境变量的文件或目录。例如,因为我配置了Chromium 将其缓存存储在 的子目录中%temp%,如果变量扩展,那很好,但是如果它没有扩展,Chromium 会%temp%在其自己的目录下创建一个名为的目录,并将缓存(可能会变大)存储在那里。我想在我的临时/垃圾文件清理脚本中添加一行以自动删除该文件夹(如果存在),但我无法弄清楚如何从命令行访问它而不使用通配符。)

Bob*_*Bob 10

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

dir "C:\Program Files\^%temp^%"
Run Code Online (Sandbox Code Playgroud)

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

dir ^"C:\Program Files\^%temp^%^"
Run Code Online (Sandbox Code Playgroud)

它看起来很丑,但它有效。

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