Donc, si j'ai un répertoire stocké dans une variable, dites:
$scriptPath = (Get-ScriptDirectory);
Maintenant, j'aimerais trouver le répertoire deux niveaux parent supérieurs.
J'ai besoin d'une bonne façon de faire:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Puis-je accéder à rootPath en une ligne de code?
get-item
est votre aide ici.
(get-item $scriptPath ).parent.parent
Si vous voulez la chaîne uniquement
(get-item $scriptPath ).parent.parent.FullName
Si $scriptPath
pointe sur un fichier, vous devez d’abord appeler la propriété Directory
afin que l’appel ressemble à ceci
(get-item $scriptPath).Directory.Parent.Parent.FullName
Remarques
Cela ne fonctionnera que si $scriptPath
existe. Sinon, vous devez utiliser Split-Path
cmdlet.
J'ai résolu ça comme ça:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
Vous pouvez le scinder en barres obliques inverses et utiliser l'avant-dernier avec indexage de tableau négatif pour obtenir uniquement le nom du répertoire des grands-parents.
($scriptpath -split '\\')[-2]
Vous devez doubler la barre oblique inverse pour y échapper dans la regex.
Pour obtenir le chemin complet:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'
Et, en regardant les paramètres de split-path, il prend le chemin comme entrée de pipeline, donc:
$rootpath = $scriptpath | split-path -parent | split-path -parent
Vous pouvez utiliser
(get-item $scriptPath).Directoryname
pour obtenir le chemin de la chaîne ou si vous souhaitez utiliser le type de répertoire, utilisez:
(get-item $scriptPath).Directory
Dans PowerShell 3, $PsScriptRoot
ou pour votre question de deux parents,
$dir = ls "$PsScriptRoot\..\.."
Vous pouvez simplement enchaîner autant de split-path
Comme vous le souhaitez:
$rootPath = $scriptPath | split-path | split-path
Split-Path -Path (Get-Location).Path -Parent
Si vous voulez utiliser $ PSScriptRoot vous pouvez faire
Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve