我希望这个小小的powershell一行代码能够回显foo.txt的完整路径,其中目录是我的当前目录。
[System.IO.Path]::GetFullPath(".\foo.txt")
但事实并非如此。它打印...
C:\Documents and Settings\Administrator\foo.txt
我不在$ home目录中。它为什么在那里解决?
我希望这个小小的powershell一行代码能够回显foo.txt的完整路径,其中目录是我的当前目录。
[System.IO.Path]::GetFullPath(".\foo.txt")
但事实并非如此。它打印...
C:\Documents and Settings\Administrator\foo.txt
我不在$ home目录中。它为什么在那里解决?
[System.IO.Path]
是使用shell进程的当前目录。你可以用Resolve-Path
cmdlet将获取的绝对路径:
Resolve-Path .\foo.txt
这种行为是不直观的,并且与地球上其他所有shell脚本系统不一致。当然。谢谢像Shay这样的StackOverflow用户,帮助我们了解人们对Powershell的理解! – 2012-11-12 12:19:15
“Resolve-Path”的缺点是它只能解析实际存在的路径。 – herzbube 2013-04-11 15:12:14
啊。因此,为了填充或扩展您打算创建的路径,您不能使用它。 – 2016-12-15 19:44:04
根据GetFullPath的文档,它使用当前工作目录来解析绝对路径。 PowerShell的当前工作目录是不一样的当前位置:
PS C:\> [System.IO.Directory]::GetCurrentDirectory()
C:\Documents and Settings\user
PS C:\> get-location
Path
----
C:\
我想你可以使用SetCurrentDirectory让他们匹配:
PS C:\> [System.IO.Directory]::SetCurrentDirectory($(get-location))
PS C:\> [System.IO.Path]::GetFullPath(".\foo.txt")
C:\foo.txt
我有我的提示功能做到这一点,更新当前的工作目录。 – JasonMArcher 2010-11-08 06:52:22
这只有在当前位置在文件系统中时才有效。首先检查$ PWD.Provider.Name。 – 2012-06-28 13:51:29
没有提供者名称检查的正确方式: [环境] :: CurrentDirectory =(Get-Location -PSProvider文件系统).ProviderPath – 2013-04-30 16:38:56
你应该使用PowerShell中解决路径。 – x0n 2010-11-02 14:47:28