Por que “O sistema não pode encontrar o rótulo lote especificado” é lançado mesmo se rótulo existe?
-
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?
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 ....