繁体   English   中英

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

[英]Unexpected “The system cannot find the drive specified.” in 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以添加注释,因此没有模糊性的余地,但我确实发现:: style更容易阅读。

这在批处理代码块中是一种令人讨厌的效果。

在代码块中,一行中的标签总是需要具有完全不同语法规则的辅助行(对于辅助行)。
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 ::\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM