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