Как получить родительский каталог в 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