繁体   English   中英

使用get-childitem -Exclude 避免回收站、windows、程序文件

[英]Using get-childitem -Exclude to avoid recycle bin, windows, program files

我试图在对Get-ChildItem的递归调用中排除“回收站”、“Windows”和“程序文件”文件夹。

我认为它只是-Exclude '$Recycle.Bin', 'Windows', 'Program Files'-Exclude 'C:\$Recycle.Bin', 'C:\Windows', 'C:\Program Files' ,但这些都没有给我想要的结果。 有任何想法吗? 谢谢

使用 Recurse 选项时,Exclude 不会过滤掉在排除目录中找到的子对象。 这里的答案包含一个很好的解释:

如何从 PowerShell 中的 Get-ChildItem 中排除文件和文件夹?

您可以按照其他答案的建议将多个呼叫串在一起来完成您想要的。 这是一个示例单行 PowerShell 命令,它列出了所有大于 1GB 的文件,不包括您列出的目录:

Get-ChildItem C:\ -Directory | Where-Object Name -NotIn @('Windows','Program Files','$Recycle.Bin') | % { Get-ChildItem -File $_.FullName -Recurse} | Where-Object {($_.Length /1GB) -gt 1} | Sort -Descending -Property Length | Format-Table Length, FullName -AutoSize -Wrap

以下是此单线工作原理的细分:

  1. 第一个 Get-ChildItem 返回 C:\ 驱动器下的所有顶级目录。
  2. 然后将这些目录通过管道 (|) 传送到 Where-Object cmdlet,我们在其中使用 -NotIn 参数指定要排除的目录名称数组。
  3. 然后将此过滤后的顶级目录集传递到此处用 % 别名表示的 ForEach-Object cmdlet。
  4. 然后将每个目录一个接一个地传递到另一个 Get-ChildItem cmdlet,该 cmdlet 执行您想要的递归搜索。 (请注意,我使用 -File 过滤器仅返回文件)

这应该涵盖您在原始问题中所要求的内容。 第二个 Where-Object cmdlet 过滤大小超过 1GB 的文件,然后按文件大小排序,结果以表格格式打印出来。 您可能想用您想要做的任何事情来替换这些部件。

如果您想使用不同类型的过滤器而不是 NotIn 过滤器,请查看Where-Object文档中的所有其他可用选项。

您可以改用此语法来实现相同的效果。

$Directories = Get-ChildItem c:\ -Directory | Where-Object Name -NotIn @('Windows','Program Files','$Recycle.Bin')
$Output = $Directories | % { Get-ChildItem $_.FullName -Recurse}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM