Pourquoi le message «Le système ne trouve pas l’étiquette de lot spécifiée» est émis même si l’étiquette existe

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

  •  04-07-2019
  •  | 
  •  

Question

Lors de l'exécution d'un fichier de commandes dans Windows XP, j'ai trouvé un message d'erreur se produisant de manière aléatoire:

  

Le système ne trouve pas l'étiquette de lot spécifiée name_of_label

Bien sûr, l'étiquette existait. Quelle est la cause de cette erreur?

Était-ce utile?

La solution

En fait, vous avez besoin de 2 conditions pour que cela se produise:

  • le fichier de commandes ne doit pas utiliser les fins de ligne CRLF
  • le libellé auquel vous accédez est obligé de s'étendre sur une limite de bloc (contrairement à et: libellé de fin qui n'est qu'un raccourci vers la fin de votre script)

Voir. Le système ne parvient pas à trouver le étiquette de lot spécifiée et Batch-as-batch-can!

Autres conseils

J'ai déjà eu le même problème. Cependant, la cause première n'était pas du tout CRLF. C'est parce que, dans le script, j'ai exécuté un programme externe tel que Ant, mais je n'ai pas mis de CALL avant Ant. Veillez donc à APPELER tous les programmes externes utilisés dans votre script batch.

Voici le problème et comment le résoudre. Le problème est un bogue ou une fonctionnalité du programme cmd batch batch. D'abord, l'énoncé clair du problème. Si vous avez un fichier de commandes DOS avec des étiquettes cibles telles que ": dothis", et qu'à la fin de l'étiquette, vous ne disposez pas d'espace, le fichier de commandes ne fonctionnera pas si la fin de ligne est une fin de ligne UNIX. Cela signifie que vous devez exécuter unix2dos sur le fichier avant de pouvoir l'utiliser.

La cause principale est le processeur de ligne de commande DOS (programme shell) qui prend le caractère de fin de ligne UNIX dans le libellé. Puisque la partie go n'utilise jamais cela comme étiquette, elle n'est jamais trouvée car une telle étiquette n'existe vraiment pas. La solution consiste à mettre un espace supplémentaire à la fin de chaque étiquette cible, voire mieux chaque ligne. Maintenant, les fins de ligne UNIX ne sont pas lues, car l’espace sert de séparateur et tout fonctionne.

Si le fichier de commandes comporte des fins de ligne Unix (séparateurs de ligne), cela peut parfois arriver.

unix2dos et le problème doit être résolu.

Assurez-vous également que lorsque vous appelez d'autres scripts, vous utilisez CALL, au lieu de les appeler dans l'environnement de l'appelant.

Je viens de rencontrer un problème similaire avec un fichier .cmd et Windows 8. La solution consistait à modifier toutes les fins de ligne en style CR + LF DOS. Le problème était source de confusion, car le fichier de commandes fonctionnait généralement dans la plupart des cas et la réorganisation des lignes a modifié l’effet.

Le fichier .cmd ressemblait à:

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...

La fonction C provoquerait une erreur "Le système ne peut pas trouver l'étiquette de lot spécifiée". Étrangement, il pourrait s'en aller en réorganisant les appels. Changer les fins de ligne de 0x0A à 0x0D0A semble l’avoir corrigé.

Peut-être que VonC voulait dire "le fichier de commandes doit utiliser les fins de ligne CRLF".

J'ai eu ce problème après avoir copié une commande de démarrage à partir de word et l'avoir copié dans la fenêtre de commande. Il y avait une option avec " - " sur le devant et pensait que son apparence était identique à celle du DOS "- &"; ça ne l'était pas :) Après avoir tapé le " - " le problème a été résolu par moi-même et le lot a fonctionné ... un problème difficile à trouver ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top