So umgehen Sie Leerzeichen in Dateipfaden in der Windows-Befehlszeile

In Kommandozeilenumgebungen, wie der Windows-Eingabeaufforderung und PowerShell, werden Leerzeichen zur Trennung von Befehlen und Argumenten genutzt. Jedoch können Datei- und Ordnernamen ebenfalls Leerzeichen beinhalten. Um einen Dateipfad mit Leerzeichen korrekt anzugeben, ist es notwendig, diese zu „escapen“.

Grundlagen der Befehlszeile: Warum das Escapen von Leerzeichen wichtig ist

Das „Escapen“ eines Zeichens bewirkt eine Veränderung seiner ursprünglichen Bedeutung. Durch das Escapen eines Leerzeichens wird es von der Shell als normales Leerzeichen behandelt und nicht als Trennzeichen für Befehlszeilenargumente.

Nehmen wir an, Sie möchten den Inhalt einer Textdatei einsehen. Hierfür verwenden Sie den Befehl „type“. Wenn sich die Textdatei beispielsweise unter „C:TestFile.txt“ befindet, zeigt folgender Befehl in der Eingabeaufforderung ihren Inhalt an:

type C:TestFile.txt

Soweit, so gut. Was aber, wenn sich die gleiche Datei unter „C:Test FolderTest File.txt“ befindet? Der folgende Befehl wird nicht funktionieren, da die Leerzeichen im Pfad hinderlich sind:

type C:Test FolderTest File.txt

Die Befehlszeile interpretiert dies so, als würden Sie nach einer Datei namens „C:Test“ suchen, und gibt einen Fehler aus, dass der angegebene Pfad nicht gefunden wurde.

Drei Methoden zum Escapen von Leerzeichen unter Windows

Es gibt drei unterschiedliche Wege, um Dateipfade unter Windows zu maskieren:

  • Einschließen des Pfades (oder von Teilen davon) in doppelte Anführungszeichen („).
  • Voranstellen eines Caret-Zeichens (^) vor jedes Leerzeichen. (Diese Methode funktioniert nur in der Eingabeaufforderung/CMD und scheint nicht mit jedem Befehl kompatibel zu sein.)
  • Hinzufügen eines Gravis-Akzents (`) vor jedes Leerzeichen. (Diese Methode funktioniert ausschließlich in PowerShell, ist dort jedoch zuverlässig.)

Im Folgenden zeigen wir, wie jede dieser Methoden angewendet wird.

Den Pfad in Anführungszeichen setzen („)

Die gängigste Methode, um sicherzustellen, dass Windows einen Dateipfad korrekt interpretiert, ist das Einschließen des gesamten Pfades in doppelte Anführungszeichen. In unserem oben genannten Beispiel würden wir also folgenden Befehl verwenden:

type "C:Test FolderTest File.txt"

Es ist auch möglich, nur Teile des Pfades in Anführungszeichen zu setzen. Wenn sich beispielsweise im selben Ordner eine Datei namens „File.txt“ befände, könnte man folgenden Befehl ausführen:

type C:"Test Folder"File.txt

Dies ist jedoch nicht zwingend erforderlich; in den meisten Fällen reicht es aus, den gesamten Pfad in Anführungszeichen zu setzen.

Diese Methode ist sowohl in der klassischen Eingabeaufforderung (CMD) als auch in der Windows PowerShell anwendbar.

Fallweise: Leerzeichen mit dem Caret-Zeichen escapen (^)

In der Eingabeaufforderung kann man Leerzeichen theoretisch mit dem Caret-Zeichen (^) escapen. Dieses Zeichen wird vor jedes Leerzeichen im Dateinamen gesetzt. (Sie finden das Caret-Zeichen auf der Zahlenreihe Ihrer Tastatur. Zur Eingabe drücken Sie Umschalt+6.)

Hier liegt jedoch das Problem: Obwohl dies theoretisch funktionieren sollte, ist dies nicht immer der Fall. Die Verarbeitung dieses Zeichens durch die Eingabeaufforderung ist nicht immer konsistent.

In unserem Beispiel würde die Ausführung des folgenden Befehls nicht zum gewünschten Ergebnis führen:

type C:Test^ FolderTest^ File.txt

Wenn wir jedoch versuchen, unsere Datei direkt zu öffnen, indem wir ihren Pfad in die Eingabeaufforderung eingeben, können wir erkennen, dass das Caret-Zeichen die Leerzeichen korrekt maskiert:

C:Test^ FolderTest^ File.txt

Wann funktioniert es also? Unsere Recherchen zeigen, dass die Methode mit einigen Befehlen funktioniert, mit anderen aber nicht. Es hängt vom verwendeten Befehl ab. Die Handhabung dieses Zeichens durch die Eingabeaufforderung ist nicht immer vorhersehbar. Testen Sie es mit Ihrem jeweiligen Befehl, falls Sie Interesse haben; es könnte funktionieren, muss es aber nicht.

Um Konsistenz zu gewährleisten, empfehlen wir, in der Eingabeaufforderung bei der Verwendung von doppelten Anführungszeichen zu bleiben, oder auf PowerShell umzusteigen und die Methode mit dem Gravis-Akzent anzuwenden.

PowerShell: Der Gravis-Akzent (`)

In PowerShell dient der Gravis-Akzent (`) als Escape-Zeichen. Es wird einfach vor jedes Leerzeichen im Dateinamen gesetzt. (Sie finden dieses Zeichen auf Ihrer Tastatur links von der 1, oberhalb der Tabulatortaste und unterhalb der Esc-Taste.)

type C:Test` FolderTest` File.txt

Jeder Gravis-Akzent weist PowerShell an, das darauffolgende Zeichen zu maskieren.

Beachten Sie, dass diese Methode ausschließlich in der PowerShell-Umgebung funktioniert. In der Eingabeaufforderung müssen Sie das Caret-Zeichen verwenden.

Wenn Sie mit UNIX-ähnlichen Systemen, wie Linux und macOS, vertraut sind, sind Sie möglicherweise an die Verwendung des umgekehrten Schrägstrichs (\) vor einem Leerzeichen zum Escapen gewöhnt. Windows nutzt diesen Schrägstrich jedoch für normale Dateipfade. Daher funktioniert er nicht. Das Caret-Zeichen (^) und der Gravis-Akzent (`) sind die Windows-Versionen des umgekehrten Schrägstrichs, je nachdem, welche Befehlszeilen-Shell Sie verwenden.