我的批处理文件 (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
来添加注释会更容易,这样就不会有歧义,但我确实发现 ::
风格更容易阅读。
这是批处理代码块中的一个不起眼的效果。
在代码块中,一行中的标签始终需要具有完全不同语法规则的辅助行(对于辅助行)。
SO:goto 命令不起作用
第二行必须是命令或简单标签,但不能是括号、双冒号或附加括号的内部命令。
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
)
有时
::
用作注释样式,如果您不关心辅助行,这可能会导致块内出现问题。
编辑:回答你的第二个问题
判断 :: 是否表示“评论开始”的规则是什么 或“驱动器号冒号”?
第一个
::
始终是注释或标签,下一行始终是 drive letter colon
。
::
是有效的驱动器。就像 c:
或 d:
但字母是 :
因此,您的线路正在尝试从当前驱动器更改为驱动器
::
示例:尝试
subst :: c:\
,然后 dir ::\