是否有一个PowerShell cmdlet等效于[System.IO.Path] :: GetFullPath($ fileName); 当$ fileName不存在?

Jus*_*ing 4 powershell cmdlets

如果$文件名存在,那么该cmdlet相当于[System.IO.Path]::GetFullPath($fileName);(Get-Item $fileName).FullName.但是,如果路径不存在,则抛出异常.他们的另一个cmdlet我不见了?

Join-Path 是不可接受的,因为它在传递绝对路径时不起作用:

C:\Users\zippy\Documents\deleteme> join-path $pwd 'c:\config.sys'
C:\Users\zippy\Documents\deleteme\c:\config.sys
C:\Users\zippy\Documents\deleteme>
Run Code Online (Sandbox Code Playgroud)

man*_*lds 8

Join-Path这是我相信的不存在项目的路径.像这样的东西:

join-path $pwd $filename
Run Code Online (Sandbox Code Playgroud)

更新:

我不明白为什么你不想使用.Net"代码".Powershell基于.Net.所有cmdlet都是.Net代码.只有正确的理由才能避免使用.Net Code,当前目录是Powershell启动的目录,而不是$pwd

我只是列出了我认为可以这样做的方式,以便您可以处理绝对和相关的路径.它们似乎都不比那个简单GetFullPath():

$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($filename)
Run Code Online (Sandbox Code Playgroud)

如果您担心绝对路径是否通过,您可以执行以下操作:

if(Split-Path $filename -IsAbsolute){
    $filename
}
else{
    join-path $pwd $filename  # or join-path $pwd (Split-Path -Leaf $filename)
}
Run Code Online (Sandbox Code Playgroud)

这是丑陋的

 $item = Get-Item $filename -ea silentlycontinue
 if (!$item) {
 $error[0].targetobject
 } else{
 $item.fullname
 }
Run Code Online (Sandbox Code Playgroud)

类似的问题,有类似的答案:Powershell:解决可能不存在的路径?