报名软件批次分类code不能为空_Windows批处理文件 - 系统找不到指定的批次标签...

The Problem

I'm having a problem with a DOS batch file and labels.

I keep getting this error:

The system cannot find the batch label

specified

What I've tried

Two computers; a WindowsXP and a 2003 Server.

Made sure it was encoded as ASCII

Editted the hex code for the line continuation characters. Tried replacing all with CR , LF, and CRLF in turn. All combinations give me the same error.

Tried inserting extra characters before the label to make the label past 512 characters.

Here is the code:

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

Here's the hex with 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

Here's the console's output (when I remove @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 . . .

It never actually creates the 7zip file, so I think I can assume that its crashing on this line;

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

If I run that line by itself from a command prompt, it works fine and creates the dependencies.7z, so I don't think its necessarily a problem with 7za.exe.

I've already read this stackoverflow question:

stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-ex

and the link from that post;

help.wugnet.com/windows/system-find-batch-label-ftopict615555.html

The Answer

So, I found the problem guys.

I was using a technique I commonly use that I could only really describe as "proxy" batch files. I have a folder called c:\scripts, and I put several bat files in there to target commonly used exes. This saves my PATH variable from becoming absolutely massive with all of my command line tools. This way I only need to add c:\scripts to my PATH, and create a proxy batch file when I need something.

I had 7za.bat in c:\scripts, containing only this;

@echo off

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

I changed my script to this;

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

instead of this;

SET zip=7za a dependencies.7z

and it worked flawlessly.

The moral of the story...

Avoid calling other batch files from within a batch file. If you do, you will need to prefix them with "call".

解决方案

I would point out that the "Testing 1.2.3..." and "Press any key to continue . . ." lines indicate that execution has successfully gone to the :dozip label and then successfully returned to the caller.

Is the "7za" executable actually a batch file? If I modify my test script to have the helper be a batch file, I get the same error. The fix is to do 'call %zip% %1'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值