Arquivo em lote do Windows - O sistema não pode encontrar o rótulo do lote especificado

O problema

Estou tendo um problema com um arquivo em lotes e rótulos do DOS. Eu continuo recebendo esse erro:

O sistema não pode encontrar o rótulo do lote especificado

O que eu tenteiDois computadores; um WindowsXP e um 2003 Server.Certifica-se de que foi codificado como ASCIIEditado o código hexadecimal para os caracteres de continuação de linha. Tentei substituir todos com CR, LF e CRLF por sua vez. Todas as combinações me dão o mesmo erro.Tentei inserir caracteres extras antes do marcador para deixar o marcador passar de 512 caracteres.

Aqui está o código:

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

Aqui está o hexadecimal com 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

Aqui está a saída do console (quando eu remover @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 . . .

Na verdade, ele nunca cria o arquivo 7zip, então acho que posso supor que ele está falhando nessa linha;

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

Se eu executar essa linha por si só a partir de um prompt de comando, ele funciona bem e cria as dependências.7z, então eu não acho que seja necessariamente um problema com o 7za.exe.

Eu já li essa pergunta stackoverflow: stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-ex

e o link desse post; help.wugnet.com/windows/system-find-batch-label-ftopict615555.html

A resposta

Então, eu encontrei o problema pessoal.

Eu estava usando uma técnica comumente usada que só poderia descrever como arquivos em lote "proxy". Eu tenho uma pasta chamada c: \ scripts, e eu coloquei vários arquivos bat lá para direcionar exes comumente usados. Isso evita que minha variável PATH se torne absolutamente massiva com todas as minhas ferramentas de linha de comando. Dessa forma, só preciso adicionar c: \ scripts ao meu PATH e criar um arquivo de lote do proxy quando precisar de algo.

Eu tinha 7za.bat em c: \ scripts, contendo apenas isso;

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

Eu mudei meu roteiro para isso;

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

em vez disso;

SET zip=7za a dependencies.7z

e funcionou sem falhas.

A moral da história...

Evite chamar outros arquivos em lote de dentro de um arquivo em lotes. Se você fizer isso, você precisará prefixá-los com "ligar".

questionAnswers(5)

yourAnswerToTheQuestion