假设我有这个文件:
C:\[foo]\bar
我会运行以下PowerShell命令:
$path = 'C:\[foo]'
get-childitem -literalpath $path
一切都正常运行,get-childitem
显示了文件 bar
,然后立即返回。
现在我添加了 -recurse
选项:
$path = 'C:\[foo]'
get-childitem -literalpath $path -recurse
get-childitem
不再显示文件bar
。此外,该命令会运行很长时间,并在C:\Windows
下面的文件夹中显示各种“拒绝访问”的错误消息,显然是因为它扫描了整个C:驱动器。
问题与文件夹名中含有括号[bar]
有关。如果我将文件夹重命名为没有括号的bar
,即可按预期递归结果。
我的主要问题是:如何说服get-childitem
递归扫描名称中带有括号(或其他特殊字符)的文件夹?
第二个问题:这是一个已知的漏洞吗?
环境:Windows 8.1,PowerShell 4.0。
编辑:我验证了在PowerShell 2.0(Windows 7机器上)get-childitem
是否带有-recurse
返回相同的结果。似乎该行为在版本3.0或4.0中发生了变化。