【问题标题】:Get-ChildItem reports different value to ExplorerGet-ChildItem 向 Explorer 报告不同的值
【发布时间】:2013-10-23 21:57:37
【问题描述】:

非常直接的问题,为什么Get-ChildItem -recurse 报告的文件夹数量与 Explorer 报告的完全不同?

例如,当您考虑到所有子文件夹的递归时,我有一个包含大量文件夹的数据驱动器。 Explorer 报告一个数字,Get-ChildItem 报告完全不同的东西?

我是不是太密集而遗漏了什么?隐藏文件夹等不显示在资源管理器中,Get-ChildItem 没有使用-force 标志,所以它应该显示相同的结果?

【问题讨论】:

  • 您确定这些文件夹中也没有某些文件吗,因为您列出的命令将报告文件和文件夹。您可以使用 Attributes 参数将其限制为仅文件夹。例如“Get-ChildItem -Recurse -Attributes d”。
  • 我在管道上使用 PSIContainer
  • 你到底是怎么数的?你期望什么数字?您是否尝试过较小的测试用例?

标签: powershell


【解决方案1】:

您是否显示隐藏文件夹对您从 Windows 资源管理器获得的文件夹计数没有影响,它会计算您有权列出其父文件夹的所有文件夹。但是,带有 -Force 参数的 Get-ChildItem 并不总是提供与 Windows 资源管理器相同的计数,因为 -Force 也计算连接点,而 Windows 资源管理器没有。

除非我忽略了某些东西,否则这应该始终为您提供与 Windows 资源管理器相同的计数:

Get-ChildItem -Recurse -Force | ?{$_.PSIsContainer -and ($_.Attributes -notmatch 'ReparsePoint')} | Measure

【讨论】:

  • 我关于隐藏文件的理论绝对是假的,我将删除我的答案。您的答案很接近(我 +1),但仍然没有为我系统上的大型目录提供正确的结果(相差几个)。无论如何,您可以通过将其更改为 Get-ChildItem -Recurse -Force -Attribute Directory+!ReparsePoint 来加快速度。按原样,您正在流水线化每个文件和目录并对其进行正则表达式检查,这非常昂贵:)
  • @latkin 啊,这就是为什么它不允许我在您的答案下发布我试图添加的评论。 :) 事实上,我确实用 -Attributes 尝试过,除了我使用 -Force 的属性 而不是...但得到了相同的结果就像我对 -Forcewhere 过滤器所做的那样。我将在此处添加评论:
  • 我想我看到了问题所在。它确实递归到连接点,不包括连接点本身,但包括它们的子目录(您认为 Explorer 处理隐藏文件夹的方式)。我怀疑您的Program Files (x86) 具有连接到具有子目录的目录的连接点,而我的没有。我也尝试按属性过滤,但得到的结果与我的答案中的命令相同:Get-ChildItem -Recurse -Attributes D+H+!ReparsePoint,D+!H+!ReparsePoint | Measure。我认为需要递归函数才能获得与 Explorer 相同的计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 2019-09-28
  • 1970-01-01
  • 2023-03-08
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多