问题
我在使用Windows批处理文件和标签时遇到了问题。 我一直收到以下错误:
系统找不到指定的批处理标签
我尝试过的方法
- 两台电脑;一个WindowsXP和一个2003 Server。
- 确保它以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"
如果我从命令提示符中单独运行该行,它可以正常工作并创建依赖项。7z,因此我不认为这是7za.exe的问题。
我已经阅读了这个stackoverflow问题: 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:\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"。
7za.exe
或call helper.bat
。(请注意,这样一来,任何以.bat
结尾的文件都会很明显。) - system PAUSE