在PowerShell中获得出色的盛大父文件夹路径(三个级别)?

时间:2018-09-05 10:44:18

标签: powershell powershell-v5.0

是否有一种优雅的方法可以从文件夹路径中将(大祖父母文件夹)升级为三个级别?

我只是想从全过程中获得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

2 个答案:

答案 0 :(得分:2)

尝试一下(仅当路径存在时才有效):

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

或者,如果路径不存在:

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

您还可以在n级使用此通用选项:

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

答案 1 :(得分: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)

输出

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