在我的文件服務器上工作時,我注意到一個奇怪的文件夾打破了我的腳本。文件夾的名稱只包含一個字符,其ASCII值爲160(non-breaking space,NBSP)。在視覺上這個名字與空格字符相同。Get-ChildItem和non-breaking space
簡而言之,我在此文件夾上執行了Get-ChildItem
,並且它正在進入無限循環。命令實際上是針對父文件夾執行的,它會再次返回有問題的文件夾,所以我的腳本進入了無限循環。
你可以很容易地在你自己的環境中模擬這個。在C:\temp
文件夾中創建名稱僅由NBSP組成的新文件夾。您可以按住alt並在數字鍵盤上按0160鍵入。創建後,運行
Get-ChildItem C:\Temp\ -Recurse
您將得到無盡名單的文件夾沒有名稱,雖然我只有一個文件夾。
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
. . .
我使用PowerShell 4和5在服務器和客戶端操作系統上對其進行了測試,其行爲與此相同。命令Get-Item
也有這個名稱的問題,並且兩個交換機-Path
和-LiteralPath
的行爲方式都是相同的。我也試過[System.IO.Directory]
類,但它有同樣的問題。
問題:我已更新我的腳本以報告具有此名稱的文件夾作爲錯誤並跳過它,但我想知道是否有一些更智能的方法來做到這一點?我的目標是運行Get-ChildItem
或對等文件夾。
這是一個已知的問題?如果被更多人確認,那麼值得將它作爲錯誤報告嗎?
是的,我看到它太。絕對是一個錯誤。 'DirectoryInfo'適用於我:'([IO.DirectoryInfo]'c:\ temp')。EnumerateFileSystemInfos('*','AllDirectories')' – wOxxOm
我也可以證實這一點,毫無疑問這是可以利用的。我會鼓勵你報告。 –
@wOxxOm你是否仍然可以緩存到該NBSP文件夾,如果它包含另一個文件夾?另外,你可以從字面上得到關於NBSP文件夾的dirinfo,而不僅僅是「temp」? – Vesper