The*_*Guy 17 windows windows-explorer command-line environment-variables ms-dos
%systemdrive%
,%windir%
或任何其他现有的变量。您不能,因为%
文件夹名称中有百分比 ( ) 符号,会混淆命令提示符,因为百分比符号用于现有变量。
%
用两个百分比符号 ( %%
)转义百分比 ( ) 符号不起作用,因此 DavidPostill 的答案是错误的:
那么,在 Windows 资源管理器中,
%
如果百分比符号用于现有变量,为什么我们可以创建带有百分比 ( ) 符号的文件夹或文件?
Dav*_*ill 18
该%
字符不是文件名中的保留字符。
命名文件、路径和命名空间的保留字符是:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
Run Code Online (Sandbox Code Playgroud)
现在,打开命令提示符并尝试转到您创建的文件夹。
不能,因为文件夹名中有百分号,表示是变量。
以上是不正确的。一切都如您所愿。
使用示例%test%
:
F:\test>echo %test%
%test%
F:\test>md %test%
F:\test>cd %test%
F:\test\%test%>
Run Code Online (Sandbox Code Playgroud)
使用示例%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
Run Code Online (Sandbox Code Playgroud)
该%
字符对于命令行参数和FOR
参数具有特殊含义。
要将百分比视为常规字符,请将其加倍:
%%
Run Code Online (Sandbox Code Playgroud)
源语法
Jac*_*ite 13
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%%
Run Code Online (Sandbox Code Playgroud)
如果没有变量 named test
,则下一个命令与上一个命令等效 - 它还会创建一个目录%test%
:
md %test%
Run Code Online (Sandbox Code Playgroud)
...但请永远不要这样做,因为一旦有人创建了具有该名称的变量,您的命令将不会按照您想要的方式运行
如果您打算for
在 BAT 文件中使用 command ,您还需要加倍,%
以便它对for
command 而不是命令 shell 本身具有特殊意义:
for %%i in (*.*) do echo %%i
Run Code Online (Sandbox Code Playgroud)
这将生成当前目录中的文件列表(即%%i
具有特殊含义),我不确定如何使其生成文字%%i
而不诉诸%p%
下一节中描述的解决方法(%%%%i
此处不起作用)。
%
不是命令提示符下唯一具有特殊含义的字符。其他包括^
、<
、>
、|
、(
、)
、&
、!
、"
。大多数(不包括"
)可以转义- 即,以转义字符为前缀,^
以便插入文字字符,抑制其特殊含义。那些在双引号字符串中也失去了它们的特殊功能,并"
用反斜杠转义:\"
。某些插入符号 ( ^
) 可能需要在双引号括起来的字符串中加倍,并且在其中发生延迟变量替换 (!
特殊含义)。
不幸的是,当直接在命令提示符窗口中键入命令时,加倍%
字符只会产生%%
即上述方法在这种情况下不起作用。
似乎有一种解决方法利用命令处理中的怪癖 - 您可以%
通过^
在%
. 但是,这种方法并非万无一失:如果您的文件名用双引号括起来,^
则按字面解释(而不是像没有引号那样删除)
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 操作系统(POSIX 的超集)可以创建(和删除)大多数普通 Windows API 函数(以及 Windows 程序)无法使用的文件/目录名称。在 Windows XP 上可以通过安装免费的“Unix 子系统服务”(SFU)来使用它们;在 Vista 和更高版本上需要第三方工具。我不确定新的 ubuntu-on-windows10 子系统是否可以做到。
归档时间: |
|
查看次数: |
5604 次 |
最近记录: |