![](/img/trans.png)
[英]Windows batch script "The system cannot find the file specified." with exclamation in filenames?
[英]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.