2010-05-05 26 views

回答

7

啊,这经常让人们在PowerShell中出现。虽然PowerShell具有当前目录的概念,但它与当前目录不同。原因在于,Windows进程只能有一个当前目录,而PowerShell进程可能有多个运行空间/管道,每个运行空间/管道都有自己的当前目录,PowerShell当前目录甚至可能不是文件位置。

采用相对路径的.NET方法将根据进程的当前目录进行解析。所以为了安全起见,每当调用.NET方法时,都应该使用完全解析的路径。你可以这样做:

PS> (New-Object IO.FileInfo "$PWD\test.txt").FullName 

$ PWD得到的字符串(因为双引号)和它的自动变量,它总是返回当前的工作目录内扩展。它实际上返回一个PathInfo对象,因为它嵌入的字符串可能并不总是绝对的物理路径。如果你使用PSDrives(例如,我有一个temp:\驱动器映射到我的临时目录),你需要更加明确。

PS> (New-Object IO.FileInfo "$($PWD.ProviderPath)\test.txt").FullName 

PowerShell专家可能有一个更简洁的语法。上面的确是很丑陋。

相关问题