Est-il sûr d'écrire des fichiers batch avec des fins de ligne Unix?


15

Je pense que j'ai rencontré un bogue dans un fichier de commandes car il a été écrit avec des fins de ligne Unix. Est-ce un problème connu avec cmd.exe exécutant des fichiers batch dans Windows?


1
Je n'ai jamais eu de problème et j'utilise toujours des fins de ligne Unix. Mais cela ne signifie pas qu'il n'y a pas de problème que j'ai juste eu la chance de manquer.
Zoredache

2
Quel bug avez-vous rencontré? Les commandes ne démarrent pas? Ou tout simplement qu'il semblait qu'il n'y ait pas de fin de ligne lorsque vous ouvrez le fichier avec le bloc-notes?
Hennes

Réponses:


11

Ce n'est vraiment pas un "bug" ... car c'est une conception intentionnelle. Les nouvelles lignes Windows sont définies comme "\ r \ n" ... ou une combinaison "Retour chariot" et "Nouvelle ligne" ... tandis que les versions * nix préfèrent omettre le retour chariot. Vous devez toujours utiliser "\ r \ n" dans n'importe quoi dans Windows lorsque cela est possible. Tout le reste peut être interprété incorrectement ... et entraîner de nombreux résultats inattendus.


Je suis tombé sur un problème où call: label ne sautait pas sur une étiquette, mais le même appel plus tard dans le fichier sautait sur l'étiquette. Le fichier en question utilisait \ n des fins de ligne. Je suis passé à la fin de ligne \ r \ n pour tous les fichiers de commandes de mon projet et le problème a disparu. Je n'ai pas re-testé avec \ n fins pour confirmer qu'il ne s'agissait pas d'un simple coup de chance (l'exécution des scripts prend près d'une heure).
Samuel

2
Le bloc-notes ne peut pas gérer les fins de ligne Unix, mais WordPad peut, PowerShell peut, bien d'autres choses aussi.
Michael Hampton

Pouvez-vous fournir quelques exemples supplémentaires lorsque les fichiers .bat ne fonctionnent pas correctement avec les fins de ligne nix?
Michal Kordas

@MichalKordas Sans passer par et tester chaque version de chaque distribution Microsoft OS et * nix, c'est une tâche difficile à donner. Ce n'est vraiment pas le lieu d'entrer dans une discussion détaillée sur le sujet. Les meilleures pratiques sont telles que Windows utilise \ r \ n, * nix utilise \ n, et parfois mac utilise juste un \ r. Étant donné que seul Windows utilise des fichiers batch, il est préférable de supposer que vous devez utiliser \ r \ n.
TheCompWiz

4

Il semble que les étiquettes de lot soient ignorées lorsque LF(fin de ligne Unix) est utilisé dans un .batfichier.


3

Pour les fichiers batch, il ne semble pas y avoir de différence entre les fins de ligne Unix et les fins de ligne Windows.

goto, callou même la création de variables de saut de ligne fonctionne avec les deux styles.

Et comme l'analyseur par lots supprime les retours chariot directement après la phase d'expansion en pourcentage, ils ne joueront jamais un grand rôle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.