Как получить родительский каталог Родителя в Powershell? - PullRequest
74 голосов
/ 15 марта 2012

Итак, если у меня есть каталог, хранящийся в переменной, скажите:

$scriptPath = (Get-ScriptDirectory);

Теперь я хотел бы найти каталог на два родительских уровня вверх.Мне нужен хороший способ сделать:

$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath

Могу ли я добраться до rootPath одной строкой кода?

Ответы [ 9 ]

132 голосов
/ 15 марта 2012

Версия для каталога

get-item - ваша дружеская помощь.

(get-item $scriptPath ).parent.parent

Если вы хотите только строку

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

Версия для файла

Если $scriptPath указывает на файл, то вы должны позвонить Directoryсначала свойство, поэтому вызов будет выглядеть так:

(get-item $scriptPath).Directory.Parent.Parent.FullName

Замечания
Это будет работать только в том случае, если существует $scriptPath.В противном случае вы должны использовать Split-Path командлет.

26 голосов
/ 04 декабря 2015

Я решил это так:

$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
18 голосов
/ 15 марта 2012

Вы можете разделить его на обратную косую черту и взять предпоследний с отрицательной индексацией массива, чтобы получить только имя каталога прародителя.

($scriptpath -split '\\')[-2]

Вы должны удвоить обратную косую черту, чтобы избежать ее в регулярном выражении.

Чтобы получить весь путь:

($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'

И, глядя на параметры для split-path, он принимает путь в качестве входных данных конвейера, поэтому:

$rootpath = $scriptpath | split-path -parent | split-path -parent
10 голосов
/ 26 сентября 2013

Вы можете использовать

(get-item $scriptPath).Directoryname

, чтобы получить строковый путь или, если вы хотите использовать тип каталога:

(get-item $scriptPath).Directory
5 голосов
/ 08 октября 2013

В PowerShell 3, $PsScriptRoot или на ваш вопрос о двух родителях,

$dir = ls "$PsScriptRoot\..\.."
4 голосов
/ 04 апреля 2018

Вы можете просто связать столько split-path, сколько вам нужно:

$rootPath = $scriptPath | split-path | split-path
1 голос
/ 27 декабря 2017
Split-Path -Path (Get-Location).Path -Parent
0 голосов
/ 12 апреля 2017

Если вы хотите использовать $ PSScriptRoot, вы можете сделать

Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve
0 голосов
/ 23 ноября 2015

В PowerShell:

$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName

$parent_folder = Split-Path $this_script_path -Leaf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...