Windows批处理文件 - 系统找不到指定的批次标签(Windows batch file - T

2019-07-21 00:21发布

问题

我有一个DOS批处理文件和标签有问题。 我不断收到此错误:

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

我已经试过

  • 两台电脑; 在windowsXP和2003服务器。
  • 确定它被编码为ASCII
  • Editted为续行字符的十六进制代码。 依次尝试与CR,LF和CRLF替换所有。 所有组合给我同样的错误。
  • 试图在标签之前插入额外的字符,以使标签过去512个字符。

下面是代码:

cls
@echo off
SET zip=7za a dependencies.7z
call:dozip "c:\temp\dir.txt"

pause
goto exit

:dozip
  echo Testing 1.2.3...
  %zip% %1
goto:eof
:exit

下面是用CRLF(0D 0A)十六进制。

63 6c 73 0d 0a 53 45 54 20 7a 69 70 3d 37 7a 61 20 61 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 37 7a 0d 0a 63 61 6c 6c 3a 64 6f 7a 69 70 20 22 63 3a 5c 74 65 6d 70 5c 64 69 72 2e 74 78 74 22 0d 0a 0d 0a 70 61 75 73 65 0d 0a 67 6f 74 6f 20 65 78 69 74 0d 0a 0d 0a 3a 64 6f 7a 69 70 0d 0a 20 20 65 63 68 6f 20 54 65 73 74 69 6e 67 20 31 2e 32 2e 33 2e 2e 2e 0d 0a 20 20 25 7a 69 70 25 20 25 31 0d 0a 67 6f 74 6f 3a 65 6f 66 0d 0a 3a 65 78 69 74

这里是控制台输出(当我删除@echo关闭):

C:\>SET zip=7za a dependencies.7z

C:\>call:dozip "c:\temp\dir.txt"

C:\>echo Testing 1.2.3...
Testing 1.2.3...

C:\>7za a dependencies.7z "c:\temp\dir.txt"
The system cannot find the batch label specified - dozip

C:\>pause
Press any key to continue . . .

它从来没有真正创建7zip的文件,所以我想我可以假设它的崩溃在这条线;

7za a dependencies.7z "c:\temp\dir.txt"

如果我运行本身从命令提示符那行,它工作正常,并创建dependencies.7z,所以我不认为它一定有问题7za.exe。

我已经读过这个计算器的问题:stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-ex

并从该职位的联系; help.wugnet.com/windows/system-find-batch-label-ftopict615555.html

答案

所以,我发现这个问题的家伙。

我使用的是技术,我通常使用,我只能真的形容为“代理”的批处理文件。 我有一个文件夹名为C:\脚本,我把几个.bat文件中有瞄准常用EXE文件。 这成为我所有的命令行工具绝对大规模节省我的PATH变量。 这样,我只需要添加C:\脚本来我的道路,并创建一个代理的批处理文件,当我需要的东西。

我在C 7za.bat有:\脚本,只包含这一点;

@echo off
"C:\Program Files\7-zip\7za.exe" %*

我改变了我的剧本到这一点;

SET zip="c:\program files\7-zip\7za.exe" a dependencies.7z

代替这一点;

SET zip=7za a dependencies.7z

和它的工作完美无缺。

这个故事的主旨...

避免在批处理文件中调用其他批处理文件。 如果你这样做,你将需要与“ ”的前缀他们。

Answer 1:

我想指出的是,“测试1.2.3 ...”和“按任意键继续。” 线指示的执行已成功地走向了:dozip标签,然后成功返回给调用者。

是“7za”实际执行批处理文件? 如果我修改我的测试脚本有助手是一个批处理文件,我得到了同样的错误。 解决方法是做“呼叫%拉链%%1”



Answer 2:

这个故事的寓意是:调用外部程序/批处理文件批处理文件时,使用电话

call foo.bat

和/或

call %foo%

(调用自DOS时代从另一个批处理已完成,只记得打电话)



Answer 3:

一种可能性,尽管它似乎不太可能,就是命令扩展未启用,或者先进的日期,这是与CALL / GOTO /标签的行为干扰。

尝试:

echo [%cmdextversion%]

如果它是小于[2]或空- []然后检查是否cmd.exe正与调用/e:off ,或只是运行

cmd /e:on

在控制台窗口中,您将运行该批处理文件。



Answer 4:

您正在使用的Windows NT 4 / Windows 2000的 ? 只有在那里你可以用CALL到同一个批处理文件中调用子程序。



Answer 5:

在十六进制仔细观察,它实际上并不拥有所有CRLF( 0d 0a )。 几行结束LF-只( 0a没有前面的0d )。

检查你的十六进制编辑器,以确保每一个 0a前面有0d (仅仅一个)。

或只是削减和你的文件粘贴到空白记事本文档,并重新保存它。



文章来源: Windows batch file - The system cannot find the batch label specified