代码之家  ›  专栏  ›  技术社区  ›  henrycarteruk

在PowerShell中获取伟大的父文件夹路径(三级以上)?

  •  3
  • henrycarteruk  · 技术社区  · 6 年前

    我只想 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 回复  |  直到 6 年前
        1
  •  2
  •   marsze    6 年前

    尝试此操作(仅当路径存在时有效):

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

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

    您还可以将此通用选项用于 n 水平:

    [System.IO.Path]::GetFullPath($path + "\.." * $n)
    
        2
  •  2
  •   gvee    6 年前

    我想你可以用包装函数。。。不太理想,但有点好玩:

    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
    
    推荐文章