【发布时间】:2009-10-05 20:11:47
【问题描述】:
问题
我在使用 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”。
【问题讨论】:
-
在 Server 2003 上运行良好。使用 notepad.exe 输入,使用 ANSI 编码保存,然后从 cmd.exe 运行。
-
在我的 XP 机器上也能正常使用记事本和 ANSI 编码
-
可能无关紧要,但是这个批处理文件的名称是什么?
-
原来叫7z.bat,我试过test.bat,7z111.bat...同样的错误
-
是的,可以。在我的批处理文件中,我总是输入完整的文件名,例如
7za.exe或call helper.bat。 (注意这样,任何以.bat结尾的东西都会很明显。)
标签: windows batch-file cmd label goto