Ist es sicher, Batch-Dateien mit Unix-Zeilenenden zu schreiben?

15

Ich glaube, ich bin auf einen Fehler in einer Batchdatei gestoßen, weil er mit Unix-Zeilenenden geschrieben wurde. Ist dies ein bekanntes Problem mit cmd.exe, das Batchdateien in Windows ausführt?

cmcginty
quelle
1
Ich hatte noch nie ein Problem und verwende immer Unix-Zeilenenden. Das heißt aber nicht, dass es kein Problem gibt, das ich nur vermissen durfte.
Zoredache
2
Auf welchen Bug bist du gestoßen? Befehle können nicht gestartet werden? Oder sah es nur so aus, als gäbe es beim Öffnen der Datei mit dem Editor keine Zeilenenden?
Hennes

Antworten:

11

Dies ist wirklich kein "Bug" ... da es von Natur aus ist. Windows-Zeilenumbrüche sind definiert als "\ r \ n" ... oder eine Kombination aus "Wagenrücklauf" und "Neue Zeile" ... während * nix-Varianten den Wagenrücklauf lieber weglassen. Sie sollten in Windows nach Möglichkeit immer "\ r \ n" verwenden. Alles andere kann falsch interpretiert werden ... und zu vielen unerwarteten Ergebnissen führen.

TheCompWiz
quelle
Ich bin auf ein Problem gestoßen, bei dem call: label nicht zu einem Label gesprungen ist, sondern bei dem derselbe Aufruf später in der Datei zum Label gesprungen ist. Die betreffende Datei verwendete \ n Zeilenenden. Ich habe für alle Stapeldateien in meinem Projekt zu \ r \ n Zeilenenden gewechselt und das Problem war behoben. Ich habe nicht mit \ n Endungen erneut getestet, um zu bestätigen, dass es sich nicht nur um einen einmaligen Zufall handelt (die Ausführung der Skripte dauert fast eine Stunde).
Samuel
2
Notepad kann keine Unix-Zeilenenden verarbeiten, aber WordPad, PowerShell und viele andere Dinge können das auch.
Michael Hampton
Gibst du noch ein paar beispiele wenn .bat dateien mit nix zeilenenden nicht richtig funktionieren?
Michal Kordas
@MichalKordas Ohne jede Version jeder Microsoft OS- und * nix-Distribution durchzugehen und zu testen, ist das eine große Herausforderung. Dies ist wirklich nicht der richtige Ort, um eine detaillierte Diskussion zu diesem Thema zu führen. Die empfohlenen Vorgehensweisen lauten: Windows verwendet \ r \ n, * nix verwendet \ n und Mac verwendet manchmal nur ein \ r. Da nur Windows Batch-Dateien verwendet, ist es am besten anzunehmen, dass Sie \ r \ n verwenden sollten.
TheCompWiz
3

Bei Batch-Dateien scheint es keinen Unterschied zwischen Unix-Zeilenenden und Windows-Zeilenenden zu geben.

goto, calloder sogar das Erstellen von Zeilenvorschubvariablen funktioniert mit beiden Stilen.

Und da der Batch-Parser die Zeilenumbrüche direkt nach der prozentualen Expansionsphase entfernt, werden sie niemals eine große Rolle spielen.

jeb
quelle
3

Es scheint , dass Batch - Etiketten werden übersprungen , wenn LF(Unix Zeilenende) in einer verwendet wird .batDatei.

go2null
quelle