问题
我遇到了 Windows 批处理文件和标签的问题。我不断收到此错误:
系统找不到指定的批次标签
我试过的
- 两台电脑;WindowsXP 和 2003 服务器。
- 确保它被编码为 ASCII
- 编辑了行继续字符的十六进制代码。尝试依次用 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 off 时):
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 问题:stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-throw-even-if-label-ex
以及该帖子的链接;help.wugnet.com/windows/system-find-batch-label-ftopict615555.html
答案
所以,我找到了问题的家伙。
我正在使用一种我常用的技术,我只能将其描述为“代理”批处理文件。我有一个名为 c:\scripts 的文件夹,我在其中放了几个 bat 文件来定位常用的 exe。这可以避免我的 PATH 变量在我所有的命令行工具中变得绝对庞大。这样我只需将 c:\scripts 添加到我的 PATH 中,并在需要时创建一个代理批处理文件。
我在 c:\scripts 中有 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
它完美无缺。
这个故事的主旨...
避免从批处理文件中调用其他批处理文件。如果这样做,则需要在它们前面加上“ call ”。