Por que “O sistema não pode encontrar o rótulo lote especificado” é lançado mesmo se rótulo existe?

StackOverflow https://stackoverflow.com/questions/232651

  •  04-07-2019
  •  | 
  •  

Pergunta

Durante a execução de um arquivo de lote no Windows XP Eu descobri que ocorrem aleatoriamente mensagem de erro:

O sistema não consegue encontrar o rótulo lote especificado name_of_label

Do rótulo claro existia. O que causa esse erro?

Foi útil?

Solução

Na verdade, você precisa de 2 condições para que isso aconteça:

  • o arquivo de lote não deve usar finais de linha CRLF
  • o rótulo de saltar para devem abranger um limite de bloco (ao contrário de e: label final wich é apenas um atalho para o final do seu script)

Veja. O sistema não pode encontrar o etiqueta lote especificado e batch-as-batch-lata!

Outras dicas

Eu tenho o mesmo problema antes. No entanto, a causa raiz não foi CRLF em tudo. Foi porque no script eu executado um programa externo, como Ant, mas não colocou um CALL antes Ant. Então, certifique-se de CALL cada programa externo usado em seu script em lotes.

Aqui está o problema e como corrigi-lo. A questão é um bug ou um recurso no DOS programa de lote cmd. Primeiro o problema declaração clara. Se você tem um arquivo de lote DOS com rótulos de destino como ": dothis", e no final do rótulo que você não tem espaço, então o arquivo de lote não vai funcionar se a linha final são finais de linha UNIX. Isto significa que você tem que correr unix2dos no arquivo antes que você possa usá-lo.

A causa principal é o processador DOS linha de comando, (programa de shell), leva o personagem UNIX fim-de-linha como parte do rótulo. Desde a ir para parte nunca usa isso como o rótulo, ele nunca é encontrado uma vez que tal rótulo verdadeiramente não existe. A solução é colocar um espaço extra no final de cada rótulo de destino, ou ainda melhor cada linha. Agora UNIX final das linhas não vêm para jogar desde o espaço funciona como o separador e tudo funciona.

Se o arquivo de lote tem finais de linha Unix (separadores de linha) às vezes isso pode acontecer.

Apenas unix2dos isso e problema deve ser resolvido.

Você também deve se certificar de que ao chamar outros scripts que você usa CALL, em vez de chamá-los no ambiente do chamador.

Eu encontrei um problema semelhante agora com um arquivo .cmd e Windows 8. A solução foi mudar todos os finais de linha ao estilo CR + LF DOS. A questão foi confuso porque o arquivo batch principalmente trabalhou e linhas reorganizando mudou o efeito.

O arquivo .cmd parecia:

call:function_A "..\..\folderA\"
call:function_B "..\..\folderB\"
call:function_C "..\..\folderC\"
call:function_D "..\..\folderD\"
goto:eof

:function_A
rem do stuff
goto:eof

...etc...

Função C causaria erro "O sistema não consegue encontrar o rótulo lote especificado". Estranhamente ele poderia ir embora, reorganizando as chamadas. Alterar finais de linha de 0x0A de 0x0D0A parece ter fixa-lo.

Talvez VonC significava "o arquivo de lote deve usar finais de linha CRLF".

i tive esse problema depois de copiar um comando de partida da palavra e colá-lo na janela de comando. Houve uma opção com "-" na frente, e pensei que as parece o mesmo que o DOS "-" não foi :) Depois de digitar o "-" por mim a questão foi resolvido e o lote trabalhou ... um disco para encontrar problema ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top