在 PowerShell 中获取曾祖父文件夹路径(向上三层)?
Get great grand parent folder path (three levels up) in PowerShell?
有没有一种优雅的方法可以让(曾祖父文件夹)从文件夹路径上升三级?
我只想从完整路径中获取 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
有没有一种优雅的方法可以让(曾祖父文件夹)从文件夹路径上升三级?
我只想从完整路径中获取 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