有没有一种优雅的方法可以从文件夹路径中获取三个级别的(曾祖父级文件夹)?
我只是想从完整的道路上获得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
试试这个(仅当路径存在时才有效):
(Get-Item "$path\..\..\..").FullName
或者,如果路径不存在:
[System.IO.Path]::GetFullPath("$path\..\..\..")
您还可以将此通用选项用于n
级别:
[System.IO.Path]::GetFullPath($path + "\.." * $n)
我想你可以使用包装函数...不完全理想但有点乐趣:
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