cmd.exe hängt bei Ausgabeumleitung nicht „einfach so“ ein Leerzeichen an; meist kommt das Leerzeichen aus echo, Variablenersetzung oder der konkreten Syntax vor > – und die U...
Kann ich bei cmd.exe per Ausgabeumleitung CRLF verhindern?
Antwort vom**Nein – `cmd.exe` selbst kann bei normaler Ausgabeumleitung `>` das Zeilenende nicht auf „nur LF“ umstellen. `cmd` arbeitet dabei unter Windows-typisch mit CRLF, und das lässt sich in `cmd.exe` nicht per Schalter für die Umleitung abschalten.** Der wichtige Unterschied ist: Die Umleitung `>` schreibt einfach das, was das jeweilige Programm an `stdout` ausgibt. Das Problem ist also meist nicht die Umleitung selbst, sondern dass `echo`, `set /p`-Konstruktionen oder das aufgerufene Konsolenprogramm CRLF erzeugen. ## Was konkret geht – und was nicht Wenn du in `cmd.exe` so etwas machst: ```bat echo Hallo>datei.txt ``` landet am Ende praktisch immer ein CRLF in der Datei. `cmd.exe` hat dafür keinen eingebauten Modus wie „LF only“. Wenn du also echte Unix-Zeilenenden brauchst, gibt es nur diese Wege: - ein anderes Tool verwenden, das LF ausgibt - die Datei nachträglich konvertieren - statt `cmd.exe` z. B. PowerShell, Bash oder ein eigenes Programm nutzen ## Der häufigste Workaround in `cmd` Wenn es dir nur darum geht, **gar keinen Zeilenumbruch** zu schreiben, geht das mit: ```bat <nul set /p "=Hallo">datei.txt ``` Das verhindert aber **nicht CRLF allgemein**, sondern schreibt einfach **überhaupt keinen** Zeilenumbruch. Sobald du in `cmd` wieder einen normalen Zeilenwechsel erzeugst, bist du typischerweise wieder bei CRLF. ## Wenn du unbedingt LF brauchst Dann ist ein externes Tool die saubere Lösung, zum Beispiel PowerShell: ```bat powershell -NoProfile -Command "[Console]::Out.NewLine='`n'; 'Hallo'; 'Welt'" > datei.txt ``` Oder noch kontrollierter direkt per API: ```bat powershell -NoProfile -Command "[IO.File]::WriteAllText('datei.txt', \"Hallo`nWelt`n\")" ``` Der zweite Weg ist robuster, weil du damit die Datei direkt mit genau den gewünschten Bytes schreibst, statt dich auf das Verhalten der Konsolenausgabe zu verlassen. ## Praktisch entscheidend Wenn du **in `cmd.exe` bleiben musst**, kannst du: - **ohne Zeilenumbruch** schreiben: `<nul set /p` - **LF-only nicht nativ erzwingen** Wenn du **LF-only wirklich brauchst**, ist `cmd.exe` das falsche Werkzeug. Dafür ist PowerShell oder ein kleines Hilfsprogramm die deutlich sauberere Lösung.
Verwandte Fragen
Wie prüfe ich in cmd.exe Variablen auf nachgestellte Leerzeichen?
In cmd.exe prüfst du trailing spaces am zuverlässigsten, indem du den Originalwert mit einer rechts getrimmten Variante vergleichst; direkte String-Prüfungen sind in Batch dafür un...