web-dev-qa-db-fra.com

Comment obtenir le répertoire parent du parent dans Powershell?

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?

74
Mark Kadlec

Version pour un répertoire

get-item est votre aide ici.

(get-item $scriptPath ).parent.parent

Si vous voulez la chaîne uniquement

(get-item $scriptPath ).parent.parent.FullName

Version pour un fichier

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.

132
rerun

J'ai résolu ça comme ça:

$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
27
Matthias König

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
18
mjolinor

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
10
mithun_daa

Dans PowerShell 3, $PsScriptRoot ou pour votre question de deux parents,

$dir = ls "$PsScriptRoot\..\.."
5
Jon Davis

Vous pouvez simplement enchaîner autant de split-path Comme vous le souhaitez:

$rootPath = $scriptPath | split-path | split-path
4
wisbucky
Split-Path -Path (Get-Location).Path -Parent
2
Emrah Saglam

Si vous voulez utiliser $ PSScriptRoot vous pouvez faire

Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve
0
dzolnjan