如何在PowerShell中将相对路径转换为绝对路径?

7
如何在PowerShell中将相对路径转换为绝对路径?
$path1 = C:/1/2/3/
$parth2 = ../../base/
=====
$result = C:/1/base/
4个回答

7
(Join-Path $path1 $path2) | Resolve-Path

请注意,此解决方案基于当前位置($PWD)。 - SynCap
如果路径名称不存在,则失败。 - Hammerite

4
如果您的路径尚不存在,上述大部分内容将会出现错误。以下任一选项都可以在路径不存在时正常工作:
[IO.Path]::GetFullPath(".\abc")
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\abc.txt")

1
使用内置的.NET API - System.IO.Path.GetRelativePath
[System.IO.Path]::GetFullPath($BasePath, $RelativePath)
# OR relative to current dir when ($BasePath -eq $PWD):
[System.IO.Path]::GetFullPath($RelativePath)

0

我觉得我明白你想要的。但是如果这不是你想要的,请随意提供更多信息。

$result = Get-Item $path2 | Select-Object PSPath -ExpandProperty PSPath
$result.Substring(38)

这应该给你一个绝对路径。它会去掉 "Microsoft.Powershell.Core\Filesystem::" 这部分,如果你使用的是 Powershell 5 或更早版本,它可能会有所不同。但是,如果你想要更多细节,可以尝试使用 Get-Item cmdlet 来查看它的显示方式。


你还可以使用(Get-Item somefile.txt | Resolve-Path).ProviderPath来选择路径,而不带有"Microsoft.Powershell.Core\Filesystem::"前缀。 - Stephanvs
或者使用"FullName"代替"PSPath" - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接