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