意外“系统无法找到指定的驱动器。”在批处理文件中

时间:2013-11-07 18:31:10

标签: windows batch-file

我的批处理文件有问题(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添加评论,因此不存在歧义,但我发现::样式更容易阅读。

2 个答案:

答案 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 ::\