PowerShell-Fallen #3: Dateipfade verbinden

Veröffentlicht am Kategorisiert in PowerShell Keine Kommentare zu PowerShell-Fallen #3: Dateipfade verbinden

Irgendwann muss jeder einmal zwei oder mehr Strings zu einem Dateipfad zusammenführen.

Nicht optimal: +

Wenn es einmal schnell gehen soll, kann man sie natürlich immer mit dem Additionsoperator verbinden, aber leider wird dabei nicht überprüft, ob das Ergebnis wirklich ein gültiger Pfad ist:

"C:" + "Windows"

Output:
C:Windows

Join-Path … und seine Nachteile

Der Befehl Join-Path ist genau dafür gemacht und erfüllt seinen Zweck:

Join-Path -Path "C:" -ChildPath "Windows"

Output:
C:\Windows

Doch Join-Path überrascht mit einigen Limitationen. Erst seit PowerShell 6.0 beherrscht es das Verbinden von mehr als zwei Pfaden:

Join-Path -Path "C:" -ChildPath "Windows" -AdditionalChildPaths "Drivers", "etc", "hosts"

Output:
C:\Windows\Drivers\etc\hosts

Oder kürzer:

Join-Path "C:", "Windows", "Drivers", "etc", "hosts"

Output:
C:\Windows\Drivers\etc\hosts

Wenn aber nun ein Pfad gebaut werden soll, der mit einem Laufwerksbuchstaben beginnt, den das System nicht kennt, wird man mit einer Fehlermeldung konfrontiert:

Join-Path -Path "A:" -ChildPath "Windows"

Output:
Join-Path: Cannot find drive. A drive with the name 'A' does not exist.

Join-Path ist in den meisten Fällen ausreichend, aber nicht so mächtig wie zum Beispiel os.path.join in Python.

Besser: IO.Path

Die .NET-Klasse System.IO.Path bietet eine Combine-Methode an, die keine der oben genannten Nachteile birgt:

[System.IO.Path]::Combine("C:", "Windows", "Drivers", "etc", "hosts")

Output:
C:/Windows/Drivers/etc/hosts

Von Pascal Korz

IT Systems Engineer in und aus dem schönen Köln

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert