Wenn ich also ein Verzeichnis in einer Variablen gespeichert habe, sagen Sie:
$scriptPath = (Get-ScriptDirectory);
Jetzt möchte ich das Verzeichnis zwei übergeordnete Ebenen höher finden.
Ich brauche eine nette Art zu tun:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Kann ich in einer Codezeile zum rootPath gelangen?
powershell
scripting
Mark Kadlec
quelle
quelle
.parent
funktioniert nur bei Verzeichnisobjekten. Wenn ich einen Pfad zu einer Datei habe und das übergeordnete Verzeichnis des Verzeichnisses finden möchte, in dem sich die Datei befindet, muss ich(get-item $PathToFile ).Directory.parent
$scriptPath
existiert. Ansonsten einfach benutzenSplit-Path $scriptPath -parent
.Ich habe das so gelöst:
quelle
$RootPath = Split-Path (Split-Path $PSScriptRoot)
funktioniert auch, da-Parent
der Standardparameter für die Standortaufteilung fürSplit-Path
Sie können es an den Backslashes aufteilen und das vorletzte mit negativer Array-Indizierung verwenden, um nur den Verzeichnisnamen der Großeltern zu erhalten.
Sie müssen den Backslash verdoppeln, um ihn im regulären Ausdruck zu umgehen.
So erhalten Sie den gesamten Pfad:
Wenn Sie sich die Parameter für den geteilten Pfad ansehen, wird der Pfad als Pipeline-Eingabe verwendet.
quelle
Sie können verwenden
Um den Zeichenfolgenpfad abzurufen oder den Verzeichnistyp zu verwenden, verwenden Sie:
quelle
In PowerShell 3
$PsScriptRoot
oder für Ihre Frage nach zwei Elternteilenquelle
Sie können einfach so viele verketten,
split-path
wie Sie benötigen:quelle
quelle
Um die anderen Antworten ein wenig zu extrapolieren (so anfängerfreundlich wie möglich):
Überprüfen Sie den Objekttyp mit der GetType-Methode, um festzustellen, mit was Sie arbeiten:
$scriptPath.GetType()
Zum Schluss noch ein kurzer Tipp, der beim Erstellen von Einzeilern hilft: Get-Item hat den
gi
Alias und Get-ChildItem hat dengci
Alias.quelle
Wenn Sie $ PSScriptRoot verwenden möchten, können Sie dies tun
quelle
In Powershell:
quelle