在 Windows XP 中运行批处理文件时,我发现随机出现的错误消息:

系统找不到指定name_of_label的批次标签

标签当然存在。导致此错误的原因是什么?

有帮助吗?

解决方案

实际上,要实现这一点,你需要两个条件:

  • 批处理文件不得使用 CRLF 行结尾
  • 您跳转到的标签必须跨越块边界(与 :end 标签相反,它只是脚本末尾的快捷方式)

看。 系统找不到指定的批次标签批量就可以!

其他提示

我以前遇到过同样的问题。但是,根本原因根本不是CRLF。这是因为在脚本中我执行了一个外部程序,如Ant,但没有在Ant之前放置 CALL 。因此,请确保 CALL 批处理脚本中使用的每个外部程序。

以下是问题及其解决方法。问题是DOS批处理cmd程序中的错误或功能。首先是明确的问题陈述。如果您的DOS批处理文件包含目标标签,例如“:dothis”,并且在标签的末尾没有空格,那么如果行结尾是UNIX行结尾,则批处理文件将不起作用。这意味着您必须先在文件上运行unix2dos才能使用它。

根本原因是DOS命令行处理器(shell程序),将UNIX行尾字符作为标签的一部分。由于转到零件从不使用它作为标签,因此从未找到它,因为这样的标签确实不存在。解决方案是在每个目标标签的末尾添加一个额外的空间,甚至更好地在每一行。现在UNIX的行尾不会发挥作用,因为空间充当了分隔符并且一切正常。

如果批处理文件具有unix行结尾(行分隔符),则有时会发生这种情况。

只需 unix2dos 即可解决问题。

您还应该确保在调用其他脚本时使用CALL,而不是在调用者的环境中调用它们。

我刚才遇到了一个与.cmd文件和Windows 8类似的问题。 解决方案是将所有行结尾更改为CR + LF DOS样式。 问题很混乱,因为批处理文件大部分都有效,重新排列的行改变了效果。

.cmd文件看起来像:

call:function_A "..\..\folderA\"
call:function_B "..\..\folderB\"
call:function_C "..\..\folderC\"
call:function_D "..\..\folderD\"
goto:eof

:function_A
rem do stuff
goto:eof

...etc...

功能C会导致错误“系统找不到指定的批次标签”。奇怪的是,它可以通过重新安排电话来消失。 将行结尾从0x0A更改为0x0D0A似乎已经修复了它。

或许VonC意味着“批处理文件必须使用CRLF行结尾”。

我从word复制一个启动命令并将其粘贴到命令窗口后出现此问题。有一个选项“ - ”在前面,并认为外观与DOS“ - ”相同。它不是:)输入“ - ”之后我自己的问题已经解决了,批处理工作......很难找到问题......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top