在 PowerShell 中获取曾祖父文件夹路径(向上三层)?

Get great grand parent folder path (three levels up) in PowerShell?

有没有一种优雅的方法可以让(曾祖父文件夹)从文件夹路径上升三级?

我只想从完整路径中获取 C:\folderA\folderB,但这两种解决方案对我来说都很丑陋。

$path = "C:\folderA\folderB\folderC\FolderD\folderE"

# option 1
(Get-Item $path).parent.parent.parent.FullName

# option 2    
$path | Split-Path -Parent | Split-Path -Parent | Split-Path -Parent

试试这个(仅当路径存在时有效):

(Get-Item "$path\..\..\..").FullName

或者,如果路径不存在:

[System.IO.Path]::GetFullPath("$path\..\..\..")

您也可以将此通用选项用于 n 关卡:

[System.IO.Path]::GetFullPath($path + "\.." * $n)

我想你可以使用包装函数...不是很理想但有点有趣:

function Split-PathLots {
    [CmdletBinding()]

    Param (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Path
        ,
        [int]
        $NumberOfTimes = 1
    )

    Process {
        $PathToReturn = $Path
        Write-Verbose "Input = $Path"

        [int]$i = 1
        while ($i -le $NumberOfTimes) {
            $PathToReturn = $PathToReturn | Split-Path -Parent
            Write-Verbose "($i/$NumberOfTimes) $PathToReturn"
            $i++
        }

        return $PathToReturn
    }
}

$path = "C:\folderA\folderB\folderC\FolderD\folderE"

Write-Output (Split-PathLots -Path $path -NumberOfTimes 3 -Verbose)

输出

VERBOSE: Input = C:\folderA\folderB\folderC\FolderD\folderE
VERBOSE: (1/3) C:\folderA\folderB\folderC\FolderD
VERBOSE: (2/3) C:\folderA\folderB\folderC
VERBOSE: (3/3) C:\folderA\folderB
C:\folderA\folderB