2010-05-05 55 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專家可能有一個更簡潔的語法。上面的確是很醜陋。

相關問題