我有一个批处理文件(Windows 7 x64)的问题。我设法将其减少到以下(有两个空的注释行;似乎没有任何关系是否有实际的评论):
@echo off
if /i [%1]==[] (
echo A
::
::
echo B
)
把这个在一个批处理文件,然后运行它没有参数产生以下输出:
A
The system cannot find the drive specified.
B
删除::
行之一,或删除周围的if
,修复事情,所以你得到预期的输出:
A
B
这是怎么回事?它为什么要开车?
Edit所以我的问题真的归结为这个:
确定::
是否表示“注释开始”或“驱动器号冒号”的规则是什么?
也许它更容易切换回REM
添加注释,所以没有歧义的范围,但我发现::
风格更容易阅读。
这是批处理代码块中的 obscoure 效果。
在代码块中,一行中的标签始终需要具有完全不同的语法规则的辅助行(对于辅助行)。
SO: goto command not working
第二行必须是命令或简单标签,但不能是括号、双冒号或附加括号的内部命令。
MC ND 解释说,:
在这里像普通驱动器号一样使用,这是真的!
但是只有在辅助行中,甚至您可以通过subst :: C:\
抑制错误,该行像标签一样处理(您不能启动任何东西)。
subst :: C:\
(
:label
::\windows\system32\calc.exe
)
并且即使行是标签,辅助行也接受&
。
不合格样品
(
:Label at the end fails
)
(
:label
(
echo new Block fails
)
echo ...
)
(
:label
:: Double colon fails
)
(
:label
echo( fails also, as now a file named "echo(" is searched for execution
)
现在工作的
(
::Works
:with a "normal" label in the second line
)
(
:But this label! & echo This will not echo'd
:but & echo You can see this !
)
(
:label
echo or a simple command works too
)
有时::
用作comment style,这可能会导致块内部出现问题,如果您不关心辅助线。
编辑:回答您的第二个问题
确定::是否表示“注释开始”或“驱动器号冒号”的规则是什么?
第一个::
总是一个注释或标签,在下一行总是一个drive letter colon
。
::
是有效的驱动器。就像c:
或d:
一样,但字母是:
所以,你的线试图从当前驱动器更改为驱动器::
示例:尝试subst :: c:\
,然后尝试dir ::\
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(52条)