Как получить родительский родительский каталог в Powershell?
Итак, если у меня есть каталог, хранящийся в переменной, скажите:
$scriptPath = (Get-ScriptDirectory);
Теперь я хотел бы найти каталог с двумя родительскими уровнями.
Мне нужен хороший способ:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Могу ли я получить rootPath в одной строке кода?
Ответы
Ответ 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