我的批处理文件有问题(Windows 7 x64)。我已设法将其减少到以下(有两个空的注释行;似乎没有关系是否有实际的评论):
@echo off
if /i [%1]==[] (
echo A
::
::
echo B
)
将其放入批处理文件中,然后在没有参数的情况下运行它会产生以下输出:
A
The system cannot find the drive specified.
B
删除其中一条::
行,或删除周围的if
,修复内容,以便获得预期的输出:
A
B
这里发生了什么?为什么要寻找驱动器?
修改
感谢远方的回复。所以我的问题可以归结为:
确定
::
是否意味着“评论开始”或“驱动字母冒号”有哪些规则?
也许更容易切换回REM
添加评论,因此不存在歧义,但我发现::
样式更容易阅读。
答案 0 :(得分:17)
这在批处理代码块中是一种令人讨厌的效果。
在代码块中,一行中的标签总是需要具有完全不同语法规则的辅助行(对于辅助行)。
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
。
答案 1 :(得分:4)
::
是有效的驱动器。与c:
或d:
一样,但字母为:
因此,您的线路正在尝试从当前驱动器更改为驱动器::
示例:尝试subst :: c:\
,然后dir ::\