Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为什么;系统找不到指定的批次标签";即使标签存在也会抛出?_Windows_Batch File_Label - Fatal编程技术网

Windows 为什么;系统找不到指定的批次标签";即使标签存在也会抛出?

Windows 为什么;系统找不到指定的批次标签";即使标签存在也会抛出?,windows,batch-file,label,Windows,Batch File,Label,在Windows XP中运行批处理文件时,我发现随机出现的错误消息: 系统找不到批标签指定的名称\u或\u标签 当然,这个标签是存在的。导致此错误的原因是什么?如果批处理文件具有unix行结尾(行分隔符),则有时会发生这种情况 只有这样,问题才能得到解决。实际上,发生这种情况需要两个条件: 批处理文件不得使用CRLF行结尾 跳转到的标签必须跨越块边界(与and:end label相反,and:end label只是指向脚本末尾的快捷方式) 看。(由及 提到看到(在Windows 10上)20

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

系统找不到批标签指定的名称\u或\u标签


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

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


只有这样,问题才能得到解决。

实际上,发生这种情况需要两个条件:

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

提到看到(在Windows 10上)2014年(可能是在Windows 7或8上)显示的内容:未经授权执行的脚本/批处理程序(
.bat
.cmd
)将触发eol转换

在过去的35年中,我已经编写了数百个批处理脚本,我唯一一次遇到标签找不到的问题是文件的换行符从Windows(CR/LF)转换到Unix(LF),后者不工作


2020年2月,新增:

刚刚在Win7计算机上遇到此问题。
如果系统上不存在另一个
.bat
文件,则尝试调用该文件时也会产生此错误。
在我的例子中,我试图在未安装VS的系统上调用Visual Studio
vcvarsall.bat
文件


有关更多信息,请参阅:这是一个未定义标签的情况。

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

以下是问题以及如何解决问题。问题是DOS批处理cmd程序中的错误或功能。首先请清除问题陈述。如果您有DOS批处理目标标签为“:dothis”的文件,并且标签末尾没有空间,如果行结尾是UNIX行结尾,则批处理文件将无法工作。这意味着您必须在文件上运行unix2dos,然后才能使用它


根本原因是DOS命令行处理器(外壳程序),将UNIX行尾字符作为标签的一部分。由于“转到”部分从不使用此字符作为标签,因此找不到它,因为这样的标签确实不存在。解决方案是在每个目标标签的末尾添加一个额外的空格,甚至更好的是在每行末尾添加一个空格。现在,UNIX行尾字符不起作用,因为空格充当分隔符这一切都是可行的。

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

我在复制了一个批处理脚本之后遇到了这个问题从word启动命令并将其粘贴到命令窗口。前面有一个带“-”的选项,并且认为它看起来与DOS相同“-”不是:)在我自己键入“-”后,问题得到解决,批处理工作正常。。。一个很难找到的问题

我刚才在.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行结尾”。

用例有点不同

在构建WindowsServer2012服务器的过程中,我使用ShellProvisioner(OpenSSH)调用了一个bat脚本。 现在,脚本通过配置的虚拟机中的cmd正常工作(将断点放在packer build中以停止并确认这一点)。。。但是,它失败了,因为这些呼叫标签没有找到问题

行结尾很好,CRLF(在Notepadd++中确认)。脚本在命令行中也运行良好。而且,有时,它只是用来运行良好,有时失败,但一旦失败的一些标签,失败是一致的

最初,我只是开始通过扩展调用本身和内联子例程代码来完全删除子例程。我对只有一个调用(没有代码重复)的所有实例都这样做

但是,是的,我确实偶然发现了一艘来自3,4个地方的潜艇。在尝试了一切之后,这对我来说是有效的

在子程序上方添加8-10条REM语句。是的,我不是在开玩笑


PS:脚本非常古老,但管理层需要我通过packer来实现这一点(我们有一个第二天的计划,用Ansible/Chef替换它)。

有多种可能的方法来获得错误

  • -错误的线端,左前而非CR/LF

  • (如果这是偶然发生的,那么您的代码就糟糕得难以置信了)

  • 调用函数后直接启动另一批。
    示例:
    @echo-off
    电话:func
    第二声回音
    退出/b
    :func 第二,蝙蝠 echo再也不回来了
    这会意外地尝试在second.bat中转到标签
    :func

    但这可以(mis)用于直接调用另一个批处理文件中的标签


  • 这是所描述的行为

    在eclipse附带的ant批处理文件中出现了这个问题,并且被MSVC调用-更改行尾都已修复,谢谢。这可能是微软的另一个病态笑话。。。我花了很长时间才弄明白。。当然,记事本++不关心行尾,除非你去告诉它转换为其他。。。我的设置为仅左前。。谢谢。@MarkDeven-我甚至在使用CRLF行结尾时也有过这样的提示,但我对此表示怀疑
    @echo off
    call :func
    echo back from second
    exit /b
    :func second.bat echo NEVER COME BACK HERE