在我的文件服务器上工作时,我注意到一个奇怪的文件夹打破了我的脚本。文件夹的名称只包含一个字符,其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