我在Java應用程序內(通過Windows命令提示符)調用powershell來讀取各種文件屬性。如何在包含特殊字符的Powershell中訪問文件路徑?
例如
powershell (get-item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
我用單引號括住文件路徑,因爲它可能包含空格。 它工作正常,直到我遇到包含方括號的文件路徑,這似乎被解釋爲通配符。我設法通過加入-LiteralPath參數來解決這個問題:
powershell (get-item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
到目前爲止,一切都很好... 但文件路徑也可以包含單引號,美元符號與符號,......所有這些字符在PowerShell中似乎有一個特定的功能,其參數似乎不起作用。 我嘗試用雙引號括住路徑或用字符轉義,但是這並沒有解決我的問題:-(
有關如何將文件路徑傳遞到Powershell的任何建議,可能包含空格,單引號,方括號,&號,美元符號等
更新:??這裏 有人已經告訴我如何把它在PowerShell中的工作,但不知何故,答案已被刪除
無論如何,我做創建一個名爲$ & ' [].txt
的文件。 This works form 內 Powershell的(需要逃離&):
PS C:\Users\erlpm> Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
Directory: C:\Users\erlpm\Desktop\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012-08-23 14:22 0 $ & ' [].txt
但是,當我直通Windows命令提示符下執行相同的PowerShell命令,...
C:\Users\erlpm>powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
...我得到這個錯誤:
Ampersand not allowed. The & operator is reserved for future use; use "&" to pass ampersand as a string.
At line:1 char:55
+ Get-Item -LiteralPath C:\Users\erlpm\Desktop\Temp\`$ & <<<< ' [].txt
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : AmpersandNotAllowed
使用-command
參數,並把之間的powershell命令3210給出了完全同樣的錯誤信息......
C:\Users\erlpm>powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}
你能提供的未工作路徑的幾個例子,你會得到確切的錯誤?到目前爲止,您只提供了工作路徑,因此很難確定問題出在哪裏。 – latkin
我更新了我的問題,並添加了一些工作和非工作示例。正如你所看到的,我可以在Powershell提示符下運行它,但不能通過Windows命令提示符執行powershell。 –
我通過創建名爲「$ *'[] .txt」的文件來重現您的問題。然後,從powershell提示符下,我輸入get-item,powershell完成了我的文件名,但是我無法在這裏粘貼完成的文件名,因爲markdown會吃掉所有特殊字符。嘗試一下,看看是否有幫助。 –
joXn