Как получить родительский каталог в Powershell?
Так что если у меня есть каталог, хранящийся в переменной, скажем:
$scriptPath = (Get-ScriptDirectory);
теперь я хотел бы найти каталог два родитель уровней вверх.
мне нужен хороший способ:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
могу ли я добраться до rootPath в одной строке кода?
9 ответов:
версия для каталога
get-item
Это ваша дружеская рука помощи здесь.(get-item $scriptPath ).parent.parent
если вы хотите только строку
(get-item $scriptPath ).parent.parent.FullName
версия для файла
если
$scriptPath
указывает на файл, то вы должны называтьDirectory
свойство на нем во-первых, так что вызов будет выглядеть так(get-item $scriptPath).Directory.Parent.Parent.FullName
Примечания
Это будет работать только если$scriptPath
существует. В противном случае вы должны использовать .
вы можете разделить его на обратные косые черты и взять предпоследний с отрицательным индексированием массива, чтобы получить только имя каталога grandparent.
($scriptpath -split '\')[-2]
вы должны удвоить обратную косую черту, чтобы избежать его в регулярном выражении.
чтобы получить полный путь:
($path -split '\')[0..(($path -split '\').count -2)] -join '\'
и, глядя на параметры для split-path, он принимает путь в качестве входного сигнала конвейера, поэтому:
$rootpath = $scriptpath | split-path -parent | split-path -parent
можно использовать
(get-item $scriptPath).Directoryname
чтобы получить путь к строке или если вы хотите использовать тип каталога:
(get-item $scriptPath).Directory
Вы можете просто цепь, как много
split-path
что нужно:$rootPath = $scriptPath | split-path | split-path