因此,如果我有一个存储在变量中的目录,比如:
$scriptPath = (Get-ScriptDirectory);
现在我想找到目录 二的父级。
我需要一个好的方法:
$parentPath = Split-Path -parent $scriptPath $rootPath = Split-Path -parent $parentPath
我可以用一行代码访问 rootPath 吗?
您可以在反斜杠处分割它,然后使用带负数组索引的倒数第二个目录名来获得祖辈目录名。
($scriptpath -split '\\')[-2]
在正则表达式中,必须将反斜杠加倍才能转义它。
为了得到整个路径:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'
并且,查看分割路径的参数,它将路径作为管道输入,因此:
$rootpath = $scriptpath | split-path -parent | split-path -parent
get-item是你们友好的帮手。
get-item
(get-item $scriptPath ).parent.parent
If you Want the string only
(get-item $scriptPath ).parent.parent.FullName
如果 $scriptPath指向一个文件,那么您必须首先调用该文件的 Directory属性,因此调用如下所示
$scriptPath
Directory
(get-item $scriptPath).Directory.Parent.Parent.FullName
备注 这只有在 $scriptPath存在的情况下才有效,否则必须使用 Split-Pathcmdlet。
Split-Path
You can use
(get-item $scriptPath).Directoryname
要获取字符串路径,或者如果希望使用 Directory 类型,请使用:
(get-item $scriptPath).Directory
在 PowerShell 3、 $PsScriptRoot或者为你的两个父母的问题上,
$PsScriptRoot
$dir = ls "$PsScriptRoot\..\.."
在 Powershell 中:
$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName $parent_folder = Split-Path $this_script_path -Leaf
I've solved that like this:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
如果您想使用 $PSScriptRoot,可以这样做
Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve
Split-Path -Path (Get-Location).Path -Parent
您可以根据需要简单地链接多个 split-path:
split-path
$rootPath = $scriptPath | split-path | split-path
To extrapolate a bit on the other answers (in as Beginner-friendly a way as possible):
使用 GetType 方法检查对象类型,以查看使用的是什么: $scriptPath.GetType()
$scriptPath.GetType()
最后,一个有助于制作一行代码的小技巧: Get-Item 有 gi别名,Get-ChildItem 有 gci别名。
gi
gci
Here's the simplest solution
"$path\..\.."
如果你想得到一个绝对路径,你可以
"$path\..\.." | Convert-Path
下面是一个可重用的解决方案,首先定义 getParent 函数,然后直接调用它。
function getParent($path, [int]$deep = 1) { $result = $path | Get-Item | ForEach-Object { $_.PSIsContainer ? $_.Parent : $_.Directory } for ($deep--; $deep -gt 0; $deep--) { $result = getParent $result } return $result }
getParent $scriptPath 2