是否有一种优雅的方法可以从文件夹路径中将(大祖父母文件夹)升级为三个级别?
我只是想从全过程中获得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
答案 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