csa*_*uve 8 windows label cmd goto batch-file
我有一个DOS批处理文件和标签的问题.我一直收到这个错误:
系统找不到指定的批次标签
这是代码:
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
Run Code Online (Sandbox Code Playgroud)
这是带有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
Run Code Online (Sandbox Code Playgroud)
这是控制台的输出(当我删除@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 . . .
Run Code Online (Sandbox Code Playgroud)
它从来没有真正创建7zip文件,所以我想我可以假设它崩溃了这条线;
7za a dependencies.7z "c:\temp\dir.txt"
Run Code Online (Sandbox Code Playgroud)
如果我从命令提示符单独运行该行,它可以正常工作并创建依赖项.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文件来定位常用的exes.使用我的所有命令行工具,这可以使我的PATH变量不会变得非常庞大.这样我只需要将c:\ scripts添加到PATH中,并在需要时创建代理批处理文件.
我在c:\ scripts中有7za.bat,只包含这个;
@echo off
"C:\Program Files\7-zip\7za.exe" %*
Run Code Online (Sandbox Code Playgroud)
我改变了我的脚本;
SET zip="c:\program files\7-zip\7za.exe" a dependencies.7z
Run Code Online (Sandbox Code Playgroud)
而不是这个;
SET zip=7za a dependencies.7z
Run Code Online (Sandbox Code Playgroud)
它完美无缺.
避免在批处理文件中调用其他批处理文件.如果你这样做,你需要在它们前面添加" call ".
我会指出"测试1.2.3 ..."和"按任意键继续......" 行表示执行已成功转到:dozip标签,然后成功返回给调用者.
"7za"可执行文件实际上是批处理文件吗?如果我修改我的测试脚本以使帮助程序成为批处理文件,我会得到相同的错误.修复是'call%zip %% 1'
| 归档时间: |
|
| 查看次数: |
26563 次 |
| 最近记录: |