如何修改PowerShell命令筛选含string1且不含dislike的文件?
修改后的PowerShell命令方案
要实现查找包含string1但不包含dislike内容,同时排除指定文件名和目录的需求,有两种高效的修改方式:
方式一:先筛选含string1的文件,再排除含dislike的
这种方式适合先批量获取所有匹配string1的文件,再二次过滤:
Get-ChildItem -Path "D:\Jenkins" -File -Recurse | Where-Object { $_.Name -notlike "*log*" -and $_.DirectoryName -notlike "*\\Backup\\*" } | Select-String -Pattern "string1" | Group-Object Path | Where-Object { -not ($_.Group | Select-String -Pattern "dislike" -Quiet) } | ForEach-Object { $_.Name }
关键改动说明:
Group-Object Path:按文件路径分组,确保每个文件只处理一次Select-String -Pattern "dislike" -Quiet:用-Quiet快速返回布尔值,判断文件是否包含dislike- 最后用
ForEach-Object输出符合条件的文件路径
方式二:遍历文件时直接完成双重判断
这种方式在遍历阶段就完成所有条件过滤,减少后续处理步骤:
Get-ChildItem -Path "D:\Jenkins" -File -Recurse | Where-Object { $_.Name -notlike "*log*" -and $_.DirectoryName -notlike "*\\Backup\\*" -and (Select-String -Path $_.FullName -Pattern "string1" -Quiet) -and (-not (Select-String -Path $_.FullName -Pattern "dislike" -Quiet)) } | Select-Object -ExpandProperty FullName
关键改动说明:
- 在原有的
Where-Object中新增两个条件:Select-String -Path $_.FullName -Pattern "string1" -Quiet:判断文件是否包含string1-not (Select-String -Path $_.FullName -Pattern "dislike" -Quiet):判断文件不包含dislike
- 最后用
Select-Object -ExpandProperty FullName输出完整文件路径
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

