从绝对路径+相对或绝对路径创建新的绝对路径

马修

我正在使用psake来构建脚本,我需要使用输入的路径从当前工作目录创建一个绝对路径,该路径可以是相对路径,也可以是绝对路径。

假设当前位置是 C:\MyProject\Build

$outputDirectory = Get-Location | Join-Path -ChildPath ".\output"

给予C:\MyProject\Build\.\output,这并不可怕,但我希望没有.\我可以使用解决该问题Path.GetFullPath

当我希望能够提供绝对路径时出现问题

$outputDirectory = Get-Location | Join-Path -ChildPath "\output"

C:\MyProject\Build\output,我需要C:\output代替。

$outputDirectory = Get-Location | Join-Path -ChildPath "F:\output"

C:\MyProject\Build\F:\output,我需要F:\output代替。

我尝试使用Resolve-Path,但这总是抱怨路径不存在。

我假设Join-Path不是要使用的cmdlet,但是我还没有找到有关如何执行所需操作的任何资源。是否有一条简单的单线即可完成我所需要的?

Frode F.

您可以使用GetFullPath(),但是您需要使用“ hack”以使其使用您当前的位置作为当前目录(以解析相对路径)。使用此修复程序之前,.NET方法的当前目录是该进程的工作目录,而不是您在PowerShell进程内部指定的位置。请参见为什么PowerShell中的.NET对象不使用当前目录?

#Hack to make .Net methods use the shells current directory instead of the working dir for the process
[System.Environment]::CurrentDirectory = (Get-Location)
".\output", "\output", "F:\output" | ForEach-Object {
    [System.IO.Path]::GetFullPath($_)
}

输出:

C:\Users\Frode\output
C:\output
F:\output

这样的事情应该为您工作:

#Hack to make .Net methods use the shells current directory instead of the working dir for the process
[System.Environment]::CurrentDirectory = (Get-Location)

$outputDirectory = [System.IO.Path]::GetFullPath(".\output")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章