在PowerShell中获得非常棒的父文件夹路径(三级)?

问题描述 投票:3回答:2

有没有一种优雅的方法可以从文件夹路径中获取三个级别的(曾祖父级文件夹)?

我只是想从完整的道路上获得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
powershell powershell-v5.0
2个回答
2
投票

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

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

或者,如果路径不存在:

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

您还可以将此通用选项用于n级别:

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

2
投票

我想你可以使用包装函数...不完全理想但有点乐趣:

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)

output

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
© www.soinside.com 2019 - 2024. All rights reserved.