2010-11-01 103 views
11

我希望这个小小的powershell一行代码能够回显foo.txt的完整路径,其中目录是我的当前目录。

[System.IO.Path]::GetFullPath(".\foo.txt") 

但事实并非如此。它打印...

C:\Documents and Settings\Administrator\foo.txt 

我不在$ home目录中。它为什么在那里解决?

+2

你应该使用PowerShell中解决路径。 – x0n 2010-11-02 14:47:28

回答

16

[System.IO.Path]是使用shell进程的当前目录。你可以用Resolve-Path cmdlet将获取的绝对路径:

Resolve-Path .\foo.txt 
+1

这种行为是不直观的,并且与地球上其他所有shell脚本系统不一致。当然。谢谢像Shay这样的StackOverflow用户,帮助我们了解人们对Powershell的理解! – 2012-11-12 12:19:15

+3

“Resolve-Path”的缺点是它只能解析实际存在的路径。 – herzbube 2013-04-11 15:12:14

+0

啊。因此,为了填充或扩展您打算创建的路径,您不能使用它。 – 2016-12-15 19:44:04

10

根据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 
+0

我有我的提示功能做到这一点,更新当前的工作目录。 – JasonMArcher 2010-11-08 06:52:22

+0

这只有在当前位置在文件系统中时才有效。首先检查$ PWD.Provider.Name。 – 2012-06-28 13:51:29

+0

没有提供者名称检查的正确方式: [环境] :: CurrentDirectory =(Get-Location -PSProvider文件系统).ProviderPath – 2013-04-30 16:38:56

相关问题