如果你的文件名包含空格,在Windows命令行(cmd.exe
)中通常需要用双引号将其括起来。
dir "\Program Files"
这也适用于其他特殊字符,例如
^&;,=
。但对于百分号并不适用,因为它们可能是变量替换的一部分。例如,mkdir "%os%"
将创建一个名为Windows_NT
的目录。要转义百分号,可以使用脱字符:
mkdir ^%os^%
但不幸的是,在双引号中,插入符号失去了它的意义:
mkdir "^%os^%"
创建一个名为^%os^%
的目录。
这是我迄今为止发现的内容(Windows 7命令行):
- 字符
^
和&
可以用脱字符或双引号进行转义。 - 字符
;
、,
、=
和空格只能用双引号进行转义。 - 字符
%
只能用脱字符进行转义。 - 字符
'`+-~_.!#$@()[]{}
在文件名中似乎不需要进行转义。 - 字符
<>:"/\|?*
在文件名中是非法的。
这似乎使得对文件名进行引用的一般算法变得复杂。例如,要创建一个名为My favorite %OS%
的目录,您必须编写:
mkdir "My favorite "^%OS^%
问题1:是否有更简单的方式安全引用空格和百分号字符?
问题2:在不进行转义的情况下,使用以下字符'`+-~_.!#$@()[]{}
是否真的是安全的?
mkdir "我最喜爱的%OS%"
能够正常工作...你不需要用^
来转义%
。 - DavidPostill%OS%
变量?echo %OS%
打印什么? - nwellnhof%OS%
已设置。从echo%OS%
的输出是Windows_NT
。 - DavidPostillMy favorite %OS%
的目录,而不是进行变量替换。当我运行mkdir "My favorite %OS%"
时,我得到一个名为My favorite Windows_NT
的目录,这不是我想要的。 - nwellnhofmkdir "My favorite %%OS%%"
可以正常工作(第二个"
在正确的位置)。 - DavidPostill