给定两个任意路径base
和destination
,我想找到从base
到的最小相对路径destination
。
我当前的实现是:
Push-Location $base
try {
return (Resolve-Path -relative $destination)
} finally {
Pop-Location
}
但是,这不能满足最小化的要求。例如,给定两个路径C:\A\B\C
和C:\A\B
,..\..\B
结果是,实际上应该是..
。值得注意的destination
是,如果是文件,这确实是最小的,但对于文件夹而言却不是。
我很高兴不做手动截断之类的事情。
function GetRelative($base, $destination) {
$baseUri = [System.Uri]$($base + '/')
$destinationUri = [System.Uri]$($destination + '/')
$relativePath = $baseUri.MakeRelativeUri($destinationUri).OriginalString.TrimEnd('/').Replace('/', '\');
if ([string]::IsNullOrEmpty($relativePath)) { return "." }
else { return $relativePath }
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 java[email protected] 删除。
我来说两句