Подтвердить что ты не робот

Как получить родительский родительский каталог в Powershell?

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

$scriptPath = (Get-ScriptDirectory);

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

Мне нужен хороший способ:

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

Могу ли я получить rootPath в одной строке кода?

4b9b3361

Ответ 1

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

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.

Ответ 2

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

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

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

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

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

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

$rootpath = $scriptpath | split-path -parent | split-path -parent

Ответ 3

Я решил, что вот так:

$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent

Ответ 4

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

(get-item $scriptPath).Directoryname

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

(get-item $scriptPath).Directory

Ответ 5

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

$dir = ls "$PsScriptRoot\..\.."

Ответ 6

Split-Path -Path (Get-Location).Path -Parent

Ответ 7

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

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

Ответ 8

В powershell:

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

$parent_folder = Split-Path $this_script_path -Leaf