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...
Warum hängt cmd.exe bei der Ausgabeumleitung ein Leerzeichen an?
Antwort vom**`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 Umleitung schreibt genau das mit weg.** ## Der eigentliche Grund In `cmd.exe` gehört `>` nicht zum Text, sondern leitet nur die Ausgabe in eine Datei um. Alles, was **vorher tatsächlich ausgegeben wird**, landet unverändert in der Datei. Der häufigste Fall ist so etwas: ```bat echo Hallo > datei.txt ``` Das erzeugt normalerweise **`Hallo` plus Zeilenumbruch**, aber **kein zusätzliches Space am Ende**. Das scheinbare „angehängte Space“ entsteht meist in einem dieser Fälle: - nach einer Variablen steht bereits ein Leerzeichen - in einer Klammer-/Blocksyntax wird unbemerkt ein Leerzeichen mit ausgegeben - `echo.` / `echo(` / `set /p` werden verwechselt - vor `>` steht ein Leerzeichen, das bei bestimmten Konstruktionen Teil der Ausgabe wird - ein Editor zeigt den Zeilenumbruch oder unsichtbare Zeichen missverständlich an ## Typischer Problemfall Besonders oft passiert es mit Variablen: ```bat set var=Hallo echo %var%>datei.txt ``` Dann enthält `var` bereits am Ende ein Leerzeichen. `cmd.exe` fügt es nicht hinzu – es war schon drin. Ebenso problematisch: ```bat echo %var% >datei.txt ``` Wenn `%var%` expandiert wird und die gesamte Zeile dadurch ein Leerzeichen vor `>` enthält, kann dieses Leerzeichen je nach Konstruktion als Teil der Ausgabe erscheinen. Praktisch heißt das: **Bei `cmd` ist die genaue Position von Leerzeichen vor der Umleitung entscheidend.** ## Der wichtige Unterschied ```bat echo Hallo>datei.txt ``` und ```bat echo Hallo >datei.txt ``` sehen fast gleich aus, sind in `cmd.exe` aber nicht immer gleichwertig. Wenn du sicher **kein** Leerzeichen vor dem Umleitungsoperator in der Datei haben willst, schreibe die Umleitung direkt ohne Abstand an den letzten auszugebenden Text. Das ist die robusteste Regel. ## Wenn du exakt ohne Zusatzzeichen schreiben willst Für präzise Ausgabe ohne automatischen Zeilenumbruch ist `set /p` oft besser: ```bat <nul set /p ="Hallo">datei.txt ``` Das schreibt exakt `Hallo` in die Datei – **ohne Zeilenumbruch** und ohne zusätzliches Leerzeichen. ## Praxisfazit `cmd.exe` hängt also nicht grundsätzlich ein Space an. Das Problem ist fast immer: **Das Leerzeichen steht schon in der Ausgabequelle oder entsteht durch die Schreibweise direkt vor `>`**. Wenn du das vermeiden willst: - keine Leerzeichen direkt vor `>` - Variablen auf trailing spaces prüfen - für exakte Ausgabe lieber `set /p` verwenden statt `echo` Der überraschende Punkt dabei: Viele halten `echo Text > datei.txt` für harmlos, aber in Batch-Dateien sind gerade die unsichtbaren Leerzeichen vor Umleitungsoperatoren oft der eigentliche Fehler.
Verwandte Fragen
Kann ich bei cmd.exe per Ausgabeumleitung CRLF verhindern?
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...