【问题标题】:Get great grand parent folder path (three levels up) in PowerShell?在 PowerShell 中获取伟大的祖父文件夹路径(三个级别)?
【发布时间】:2018-09-05 19:17:56
【问题描述】:

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

我只想从完整路径中获取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-5.0


    【解决方案1】:

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

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

    或者,如果路径不存在:

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

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

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

    【讨论】:

    • 您可能想在实际切换到 Test-Path 之前尝试一下。在我的机器上显示根驱动器,即使我没有多个级别的子目录,所以如果您不是 OP,请谨慎使用此答案。
    【解决方案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
    

    【讨论】:

    • 看起来不错。不过,我会添加一些调整,并且肯定会为函数/参数名称使用不同的名称。
    • 这只是在几分钟内拼凑起来的 ;-) 但是是的,我同意,这不是最好的名字!如果您有一些建议,我可以更新我的答案中的代码
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多