Path
Join-Path
Das Cmdlet Join-Path kombiniert mehrere Pfadsegmente zu einem gültigen Dateisystempfad.
Es wird verwendet, um:
- Pfade plattformunabhängig zusammenzusetzen
- manuelles Hantieren mit Trennzeichen (
\oder/) zu vermeiden - Fehler durch doppelte oder fehlende Separatoren zu verhindern
Syntax
Join-Path
[-Path] <String>
[-ChildPath] <String>
[[-AdditionalChildPath] <String[]>]
[<CommonParameters>]
| Parameter | Typ | Beschreibung |
|---|---|---|
Path |
String |
Basispfad (z. B. Verzeichnis) |
ChildPath |
String |
Pfadsegment, das an -Path angehängt wird |
AdditionalChildPath |
String[] |
Weitere Pfadsegmente, die nacheinander angehängt werden |
Der Parameter AdditionalChildPath ist ab PowerShell 6+ verfügbar.
Hinweise zur Verwendung
- Trennzeichen werden automatisch korrekt gesetzt (kein manuelles
\nötig) - Funktioniert providerübergreifend (z. B. Registry, Zertifikate)
- Mehrere Segmente werden sauber zusammengeführt
- Bestehende Trennzeichen im Input werden berücksichtigt (keine doppelten
\\)
Verhalten
| Eigenschaft | Beschreibung |
|---|---|
| Plattformabhängigkeit | Berücksichtigt das jeweilige Dateisystem |
| Rückgabewert | `String` (zusammengesetzter Pfad) |
| Validierung | Keine Existenzprüfung des Pfades |
| Separator-Handling | Automatisch korrekt |
Beispiele
Einfaches Zusammenfügen
Join-Path -Path "C:\Temp" -ChildPath "Datei.txt"
Ergebnis: C:\Temp\Datei.txt
Mehrere Segmente
Join-Path -Path "C:\Temp" -ChildPath "Logs" -AdditionalChildPath "2026","April"
Ergebnis: C:\Temp\Logs\2026\April
Mit Variablen
$base = "C:\Temp"
$file = "report.txt"
Join-Path -Path $base -ChildPath $file
Ergebnis: C:\Temp\report.txt
Provider-unabhängig (z. B. Registry)
Join-Path -Path "HKCU:\Software" -ChildPath "Microsoft"
⚙️ Typische Anwendungsfälle
- Dynamische Dateipfade erstellen
- Arbeiten mit temporären Verzeichnissen
- Plattformunabhängige Skripte schreiben
- Zusammenbau von Registry-Pfaden
❗ Alternativen / Ergänzungen
String-Konkatenation
# ❌ Fehleranfällig
"C:\Temp\" + "Datei.txt"
- Fehleranfällig bei fehlenden oder doppelten Trennzeichen
- Nicht plattformunabhängig
[System.IO.Path]::Combine()
[System.IO.Path]::Combine("C:\Temp", "Datei.txt")
Unterschiede:
- .NET-Methode, nicht PowerShell-spezifisch
- Keine Provider-Unterstützung (nur Dateisystem)
- Kein Support für
CommonParameters
🧠 Best Practices
- Immer
Join-Pathstatt String-Konkatenation verwenden - Ab PowerShell 6 kann für mehrere Segmente
-AdditionalChildPathverwendet werden. - Kombination mit
Test-Pathfür Existenzprüfung - Variablen statt Hardcoding verwenden
Wenn du Pfade immer noch per String zusammenklebst, dann sabotierst du dich halt selbst mit Ansage. Funktioniert kurz, bricht später, und dann suchst du den Fehler wie ein Detektiv ohne Kaffee. Nimm einfach Join-Path und erspar dir das Drama.
Split-Path
Split-Path zerlegt einen Pfad in einzelne Bestandteile oder gibt gezielt einen bestimmten Bestandteil eines Pfades zurück.
Der Befehl kann beispielsweise verwendet werden, um aus einem vollständigen Dateipfad nur den Ordner, den Dateinamen oder den übergeordneten Pfad zu ermitteln.
Grundlagen
Syntax
Split-Path [-Path] <String[]> [-Qualifier] [-NoQualifier] [-Parent] [-Leaf] [-Resolve] [-Credential <PSCredential>]
Alternativ kann ein Pfad über -LiteralPath angegeben werden:
Split-Path [-LiteralPath] <String[]> [-Qualifier] [-NoQualifier] [-Parent] [-Leaf] [-Resolve] [-Credential <PSCredential>]
Der wichtigste Unterschied zwischen -Path und -LiteralPath besteht darin, dass -Path Wildcards interpretiert, während -LiteralPath den angegebenen Pfad exakt verwendet.
Beschreibung
Split-Path arbeitet ausschließlich mit der Struktur eines Pfades. Der Befehl greift dabei nicht grundsätzlich auf das Dateisystem zu.
Beispielsweise:
Split-Path "C:\Users\Jonny\Dokumente\Test.txt"
Ausgabe:
C:\Users\Jonny\Dokumente
Ohne weitere Angabe wird standardmäßig der übergeordnete Pfad zurückgegeben.
Je nach verwendeter Option kann Split-Path aber auch andere Bestandteile ermitteln:
| Option | Ergebnis |
|---|---|
| keine Option | Übergeordneter Pfad |
-Parent |
Übergeordneter Pfad |
-Leaf |
Letzter Bestandteil des Pfades |
-Qualifier |
Laufwerk bzw. Pfadqualifizierer |
-NoQualifier |
Pfad ohne Laufwerk bzw. Qualifizierer |
-Resolve |
Aufgelöster Pfad |
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
-Path |
String[] |
Gibt den zu zerlegenden Pfad an. Wildcards werden unterstützt. |
-LiteralPath |
String[] |
Gibt den Pfad exakt an. Wildcards werden nicht interpretiert. |
-Parent |
SwitchParameter |
Gibt den übergeordneten Bestandteil des Pfades zurück. |
-Leaf |
SwitchParameter |
Gibt den letzten Bestandteil des Pfades zurück. |
-Qualifier |
SwitchParameter |
Gibt den Qualifizierer des Pfades zurück, beispielsweise C:. |
-NoQualifier |
SwitchParameter |
Entfernt den Qualifizierer aus dem Pfad. |
-Resolve |
SwitchParameter |
Löst den Pfad auf und gibt den tatsächlichen Pfad zurück. |
-Credential |
PSCredential |
Gibt die Anmeldeinformationen an, die beim Auflösen des Pfades verwendet werden sollen. |
Bestandteile eines Pfades
Parent
-Parent gibt den übergeordneten Pfad zurück.
Split-Path "C:\Users\Jonny\Dokumente\Test.txt" -Parent
Ausgabe:
C:\Users\Jonny\Dokumente
Das entspricht auch dem Standardverhalten von Split-Path:
Split-Path "C:\Users\Jonny\Dokumente\Test.txt"
Leaf
-Leaf gibt den letzten Bestandteil des Pfades zurück.
Bei einem Dateipfad ist dies normalerweise der Dateiname.
Split-Path "C:\Users\Jonny\Dokumente\Test.txt" -Leaf
Ausgabe:
Test.txt
Bei einem Ordnerpfad wird entsprechend der letzte Ordner zurückgegeben:
Split-Path "C:\Users\Jonny\Dokumente" -Leaf
Ausgabe:
Dokumente
Qualifier
-Qualifier gibt den Qualifizierer eines Pfades zurück.
Bei einem lokalen Windows-Pfad ist dies normalerweise das Laufwerk:
Split-Path "C:\Users\Jonny\Dokumente\Test.txt" -Qualifier
Ausgabe:
C:
Bei anderen Pfadtypen kann der Qualifizierer entsprechend anders aussehen.
NoQualifier
-NoQualifier entfernt den Qualifizierer aus dem Pfad.
Split-Path "C:\Users\Jonny\Dokumente\Test.txt" -NoQualifier
Ausgabe:
\Users\Jonny\Dokumente\Test.txt
Damit kann beispielsweise ein Pfad ohne Laufwerksbuchstaben erzeugt werden.
Wildcards
Der Parameter -Path unterstützt Wildcards.
Beispielsweise:
Split-Path "C:\Users\Jonny\*.txt" -Leaf
Dabei wird *.txt als Wildcard interpretiert.
Soll der Pfad dagegen wörtlich behandelt werden, wird -LiteralPath verwendet:
Split-Path -LiteralPath "C:\Users\Jonny\*.txt" -Leaf
Hier wird *.txt nicht als Platzhalter interpretiert.
💡 Hinweis Der Unterschied zwischen
-Pathund-LiteralPathist besonders relevant, wenn ein Pfad Zeichen enthält, die PowerShell als Wildcards interpretiert.
Resolve
Mit -Resolve wird der angegebene Pfad aufgelöst.
Split-Path "C:\Users\Jonny\Dokumente\..\Test.txt" -Resolve
Dadurch kann beispielsweise ein Pfad mit relativen Bestandteilen wie .. auf seinen tatsächlichen Pfad reduziert werden.
-Resolve arbeitet dabei mit dem PowerShell-Provider-System und kann deshalb auch für andere Provider als das Dateisystem relevant sein.
Mehrere Pfade
Split-Path akzeptiert mehrere Pfade über -Path.
$paths = @(
"C:\Test\Datei1.txt"
"C:\Test\Datei2.txt"
"C:\Test\Datei3.txt"
)
Split-Path $paths -Leaf
Ausgabe:
Datei1.txt
Datei2.txt
Datei3.txt
Das ist besonders praktisch, wenn mehrere Pfade aus einer Pipeline oder einer Variablen verarbeitet werden sollen.
Verwendung mit der Pipeline
Split-Path kann Pfade auch über die Pipeline verarbeiten.
Get-ChildItem "C:\Test" | Split-Path -Parent
Da Get-ChildItem Objekte liefert, ist bei komplexeren Szenarien häufig die explizite Übergabe des Pfades sinnvoll:
Get-ChildItem "C:\Test" |
ForEach-Object {
Split-Path $_.FullName -Parent
}
Hier wird für jedes gefundene Objekt dessen vollständiger Pfad an Split-Path übergeben.
Typische Anwendungsfälle
Split-Path wird häufig verwendet, um:
- den Ordner einer Datei zu ermitteln
- den Dateinamen aus einem Pfad zu extrahieren
- den Laufwerksbuchstaben zu bestimmen
- Pfade ohne Laufwerksbuchstaben zu erzeugen
- Pfade vor der weiteren Verarbeitung zu zerlegen
- mehrere Pfade automatisiert zu verarbeiten
Ein typisches Beispiel ist das Ermitteln des Verzeichnisses einer Datei:
$file = "C:\Users\Jonny\Dokumente\Test.txt"
$directory = Split-Path $file -Parent
$directory
Ausgabe:
C:\Users\Jonny\Dokumente
Rückgabewert
Split-Path gibt einen oder mehrere Strings zurück.
Der genaue Inhalt hängt von der verwendeten Option ab.
| Option | Beispiel | Rückgabe |
|---|---|---|
-Parent |
C:\Test\Datei.txt |
C:\Test |
-Leaf |
C:\Test\Datei.txt |
Datei.txt |
-Qualifier |
C:\Test\Datei.txt |
C: |
-NoQualifier |
C:\Test\Datei.txt |
\Test\Datei.txt |
-Resolve |
auflösbarer Pfad | Aufgelöster Pfad |
Beispiele
Dateiname ermitteln
$path = "C:\Projekte\Projekt1\script.ps1"
Split-Path $path -Leaf
Ausgabe:
script.ps1
Verzeichnis ermitteln
Split-Path $path -Parent
Ausgabe:
C:\Projekte\Projekt1
Laufwerk ermitteln
Split-Path $path -Qualifier
Ausgabe:
C:
Pfad ohne Laufwerk
Split-Path $path -NoQualifier
Ausgabe:
\Projekte\Projekt1\script.ps1
Hinweise
Split-Pathzerlegt Pfade, anstatt Dateien oder Ordner zu verändern.- Ohne eine entsprechende Option wird standardmäßig der Parent-Pfad zurückgegeben.
-Leafeignet sich besonders zum Ermitteln eines Dateinamens.-Parenteignet sich zum Ermitteln des Verzeichnisses einer Datei.-Pathunterstützt Wildcards.-LiteralPathbehandelt den angegebenen Pfad wörtlich.- Mit
-Resolvekann ein Pfad tatsächlich aufgelöst werden. - Der Befehl arbeitet mit dem PowerShell-Provider-System und ist deshalb nicht ausschließlich auf das Dateisystem beschränkt.
Siehe auch
Join-PathResolve-PathConvert-PathGet-ItemGet-ChildItem