为什么“即使标签存在,系统也找不到指定的批次标签”?

在Windows XP中运行batch file时,我发现了随机出现的错误信息:

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

当然标签存在。 什么原因导致这个错误

其实,你需要2个条件才能发生:

  • 该batch file不得使用CRLF行结束符
  • 你跳转到的标签必须跨越一个块边界(而不是:和结束标签只是脚本结束的捷径)

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

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

这是这个问题,以及如何解决这个问题。 该问题是DOS批处理cmd程序中的一个错误或function。 首先是明确的问题陈述。 如果您的DOSbatch file的目标标签是“:dothis”,并且在标签末尾没有空格,那么如果行结尾是UNIX行结束符,batch file将不起作用。 这意味着您必须在文件上运行unix2dos才能使用它。

根本原因是DOS命令行处理器(shell程序)将UNIX行尾字符作为标签的一部分。 既然这个标签从来没有用过这个标签,所以从来没有发现这个标签真的不存在。 解决的办法是在每个目标标签的末尾添加一个额外的空间,甚至更好的每一行。 现在UNIX的行结束不起作用,因为空间起分隔符的作用。

如果batch file有unix行结束有时可能发生。

只要unix2dos它和问题就应该解决了。

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

从Word复制一个启动命令并将其粘贴到命令窗口后,我遇到了这个问题。 在前面有一个选项“ – ”,并认为外观与DOS相同“ – ”不是:)自己input“ – ”后,问题就解决了,批处理工作成功了find问题….

我刚刚遇到了一个.cmd文件和Windows 8的类似问题。解决方法是将所有行结束符更改为CR + LF DOS样式。 这个问题令人困惑,因为batch file大部分工作,重新排列的行改变了效果。

.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... 

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

也许VonC的意思是“batch file必须使用CRLF行结尾”。