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?


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.


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.


3

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.