在处理我的文件服务器时,我注意到一个奇怪的文件夹破坏了我的脚本。这个文件夹的名称只有一个字符,其ASCII值为160(表示不间断空格,NBSP)。从视觉上看,它的名称与空格字符相同。
简而言之,我执行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