首页 > 解决方案 > PowerShell get-childitem 拒绝排除目录

问题描述

我试图简单地搜索网络共享中的文件,但排除无用的目录。-exclude我知道有get-childitem.

但是,当我尝试运行命令 get-childitem -recurse -exclude \\share\folder\excludeddir时,PowerShell 会忽略 -exclude 参数。已尝试排除路径的任何和所有排列。

为什么powershell忽略-exclude参数?有什么方法可以简单地排除目录而无需编写多行代码?不,管道传输的方法| ? { $_.FullName -inotmatch 'excludeddir' }不可用,因为如果在网络共享中使用它,powershell 会完全忽略它。

标签: powershell

解决方案


如果要排除名为Desktop.

Get-ChildItem -Recurse -File | Where {
    $_.Directory.Name -ne 'Desktop'
    } | Select-String -Pattern 'mystring'

解释:

问题-Exclude在于它仅适用于当前项目路径的叶子项目。在线文档在解释其-Exclude工作原理和特性方面存在不足。因此,如果您 exclude Desktop,任何名为的文件Desktop或任何以名为的文件夹结尾的文件夹路径Desktop都将被排除。但是,它在使用时不排除排除目录的任何子文件夹或子文件-Recurse。我不知道这是设计使然还是疏忽。

如果您只搜索文件,则该-File参数只返回文件。由于FileInfo对象有一个Directory属性,它是一个DirectoryInfo对象,你可以引用它的Name属性来确定返回文件的父目录名。


推荐阅读