Answers:
该%
字符不是文件名中的保留字符。
用于命名文件,路径和名称空间的保留字符是:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
现在,打开命令提示符,然后尝试转到您创建的文件夹。
您不能,因为文件夹名称中有百分号,表示它是变量。
以上是不正确的。一切都按您期望的那样工作。
使用示例%test%
:
F:\test>echo %test%
%test%
F:\test>md %test%
F:\test>cd %test%
F:\test\%test%>
使用示例%systemdrive%
:
F:\test>echo %systemdrive%
C:
F:\test>md %systemdrive%
A subdirectory or file C: already exists.
F:\test>cd %systemdrive%
C:\Users\DavidPostill
F:\test>c:
C:\Users\DavidPostill>f:
F:\test>
F:\test>dir %systemdrive%
Volume in drive C has no label.
Volume Serial Number is C8D0-DF1E
Directory of C:\Users\DavidPostill
03/06/2016 16:16 <DIR> .
03/06/2016 16:16 <DIR> ..
18/07/2015 19:25 <DIR> .atom
03/06/2016 16:16 <DIR> .oracle_jre_usage
08/05/2015 20:29 <DIR> Contacts
03/06/2016 16:14 <DIR> Desktop
01/06/2016 09:04 <DIR> Documents
02/05/2016 12:55 <DIR> Downloads
09/01/2015 11:51 <DIR> dwhelper
08/05/2015 20:29 <DIR> Favorites
20/02/2016 22:00 <DIR> Jaikoz
08/05/2015 20:29 <DIR> Links
17/03/2015 06:19 <DIR> Music
29/03/2016 19:01 <DIR> Pictures
08/05/2015 20:29 <DIR> Saved Games
23/06/2016 10:55 <DIR> Searches
02/05/2016 12:36 <DIR> SecurityScans
11/04/2016 12:14 994 Start Menu - Shortcut.lnk
31/05/2016 00:52 <DIR> temp
17/03/2015 06:19 <DIR> Videos
1 File(s) 994 bytes
19 Dir(s) 69,716,357,120 bytes free
该%
字符对于命令行参数和FOR
参数具有特殊含义。
要将百分比视为常规字符,请将其加倍:
%%
源语法
\\?\C:\USERS\DEFAULT\<test>
)从Windows中使用这些名称创建文件。
cmd
shell 发出的... F:\test>md \\?\f:\test\<test>
命令的语法不正确。
md \\^?\f:\test\^<test^>
?
DavidPostill的回答很好,但可能会使新来者感到困惑。我会尝试改写。
%
不是保留字符。
这是一个字符特殊意义,以命令shell(又名cmd.exe
和command.com
)
区别在于:
换句话说,您可以创建一个包含%
其名称的文件或文件夹。您可以直接使用Windows资源管理器来执行此操作,因为%
那里没有特殊含义。也无意阻止您在命令提示符下创建此类文件,但是由于%
此处具有特殊含义,因此您需要使用下面概述的语法来创建此类文件。
如果您正在编写批处理文件(* .bat,*。cmd),该批处理文件将由命令外壳程序(也称为命令提示符应用程序)执行,则可以按%
字面使用(例如使用%
名称创建文件,而不是替换文件名)变量或参数),则需要键入%%
。
例如,
echo %windir%
产生输出:c:\windows
echo %%windir%%
产生输出:%windir%
echo %%%%windir%%%%
产生输出:%%windir%%
因此,如果test.bat
将以下行另存为并运行它,它将创建一个名为%test%
带有百分比符号的complete 目录:
md %%test%%
如果没有命名的变量test
,则下一个命令等效于上一个命令-它还会创建一个目录%test%
:
md %test%
...但是请不要那样做,因为一旦有人用该名称创建了变量,您的命令将不会按照您想要的方式运行
如果打算for
在BAT文件中使用命令,则还需要加倍,%
以便对for
命令(而不是命令外壳本身)具有特殊含义:
for %%i in (*.*) do echo %%i
这将在当前目录中产生文件列表(即,%%i
具有特殊含义),并且我不确定如何在%%i
不借助%p%
下一节中描述的解决方法的情况下使其产生文字(%%%%i
在这里不起作用)。
%
不是命令提示符中唯一具有特殊含义的字符。其他的还包括^
,<
,>
,|
,(
,)
,&
,!
,"
。其中大多数(不包括"
)都可以转义 -即以转义字符为前缀,^
以便插入文字字符,从而抑制了其特殊含义。那些也会在双引号字符串内失去其特殊功能,并"
以反斜杠转义:\"
。某些插入符号(^
)可能需要在双引号括起来的字符串中以及发生延迟变量替换的地方加倍(!
特殊含义)。
不幸的是,当直接在命令提示符窗口中键入命令时,%
会产生双倍字符,%%
即上述方法在这种情况下不起作用。
在命令处理中似乎有一个利用怪癖的解决方法-您可以%
通过键入^
after 获得文字%
。但是,这种方法并不是万无一失的:如果文件名用双引号引起来,^
将按字面意义进行解释(并且不会像没有引号一样被删除)
echo %windir%
产生输出:c:\windows
echo %^windir%
产生输出:%windir%
echo "%^windir%"
产生输出:("%^windir%"
带有额外的^
-不是我们想要的)我建议使用另一种解决方法:
set "p=%"
%p%
在需要文字百分号的地方使用:echo "%p%windir%p%"
现在将产生输出:"%windir%"
可以使用相同的解决方法来获取字面上的百分号for
命令,但是请注意,与BAT文件不同,for
直接键入命令时,不会使百分号加倍。
通常,您无法创建名称中包含以下保留字符的文件或目录:/
?
<
>
\
:
*
|
"
,NULL符号和代码为1到31的字符;并且.
,空格不能是最后一个字符;及以下名称是非法的:com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
。
然而,一些这些限制可以绕过前缀的文件路径与\\?\
这样的:\\?\c:\test...\nul
。至少可以使用保留名称的文件以及以空格和点结尾的文件。
而且,NTFS文件系统本身支持多个命名子系统:DOS,Windows和POSIX。Windows子系统具有上述所有限制,而POSIX仅禁止使用/
NULL符号。
因此,GNU / Linux OS(POSIX的超集)可以创建(和删除)大多数普通Windows API函数(因此Windows程序)无法使用的文件/目录名称。在Windows XP上,可以通过安装免费的“ Unix子系统服务”(SFU)来使用它们。在Vista或更高版本上,则需要第三方工具。我不确定新的ubuntu-on-windows10子系统是否可以做到。
<kbd>
。
code blocks
。但是,如果出现这样的问题,我想它们确实会引起混乱。
^
。%
是“对命令行参数和FOR参数具有特殊含义的字符。要将百分数视为常规字符,请将其加倍”。
%
的for
如果for
是一个批处理文件中。键入for %%i in (*) do echo %%i
命令propmt窗口会产生错误,提示出现%%i
。
<test>
。使用Windows的文件管理功能完全无法做到这一点。