【问题标题】:How do I search using Powershell for specifc word but exclude names with word embedded in name如何使用 Powershell 搜索特定单词但排除名称中嵌入单词的名称
【发布时间】:2017-02-22 12:20:38
【问题描述】:

我知道这可能很简单,甚至不可能,但我的 Powershell 知识是新手,我的任务是创建一个搜索我们的文件服务器以查找其中包含“NDA”的文件名。但是,我创建的脚本返回所有嵌入了 NDA 和 NDA 的文件名(即,它返回文件名,如星期一、日历、基本等)。想要这些结果的人希望尽可能过滤掉那些嵌入的单词结果。

Get-ChildItem -path u:\ -include *nda* -exclude *.tmp,*.lnk,*.xls,*.url,*.gif,*.bmp,*.msg,*.xlsx,*.kfg,*.sol,*.ics,*.srs,*.rtf,*.asd,*.dotx,*.xml -file -recurse

我也试过这个,但它也会返回所有结果。

Get-ChildItem u:\ -recurse -include *nda | Where-Object {$_.Name -match "nda"} 

我尝试添加通配符 [ ] 以尝试消除多余的结果,但我没有运气。非常感谢任何帮助。

【问题讨论】:

  • -match 也会找到嵌入的 nda。请改用where BaseName -eq 'NDA'。如果您使用-like,您可以添加通配符,即where BaseName -like "*-NDA",如果您想要的名称包含某些模式。 BaseName 是没有扩展名的文件名。
  • 您想要返回的所有文件名的格式是否相同,例如“filename-NDA.ext”?
  • 寻找文件名的团队正在尝试进行审核。因此,他们正在寻找包含或嵌入某些关键字的任何内容,但我需要排除误报。让它变得更加困难。

标签: powershell


【解决方案1】:

不知道排除列表是否足够我添加了一个or-RegEx,在开始/结束/用非字母字符分隔时选择 nda。排除列表可以从文件中读取。

$Exclude = @"
monday
calendar
fundamental
"@

Get-ChildItem -Path u:\ -recurse -include *nda* | 
  Where-Object {$_.BaseName -match "(^nda|[^a-z]nda[^a-z]|nda$)"}|
    Where-Object {$Exclude -notcontains $_.BaseName }

【讨论】:

    【解决方案2】:

    去做吧:

    Get-ChildItem "u:\" -recurse -file | Where BaseName -eq 'nda' 
    

    【讨论】:

    • 谢谢,这正是我需要的
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 2019-06-07
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多