下面的windows powershell命令帮助列出所有包含string1
的文件[不包括一些文件名]
Get-ChildItem -Path "D:\Jenkins" -File -Recurse | Where-Object { $_.Name -notlike "*log*" -and $_.DirectoryName -notlike "*\\Backup\\*" } | Select-String -Pattern "string1"
字符串
我希望增强此命令,使其显示所有包含string1
的文件,但不应包含字符串dislike
。
你能建议一下吗?
1条答案
按热度按时间biswetbf1#
Select-String
* 不 * 支持 * 组合 * 正匹配和负匹配-您可以使用 * 要么 * 正匹配(默认情况下)* 或 * 负匹配(与-NotMatch
)。最简单的解决方案--假设每个文件都能完整地放入内存(通常对 text 文件来说是安全的)--是使用
Get-Content
的-Raw
开关将每个文件读取到内存中 in full,并使用-match
,正则表达式匹配运算符及其 * 求反变体 *(-notmatch
):字符串
如果内存不足,[1]合并两个
Select-String
调用,如下所示:型
如果你不介意使用高级的regex,一个 single
Select-String
调用就足够了:型
有关正则表达式的解释和使用它的选项,请参见this regex101.com page。
[1]考虑到 text 文件很少会大到无法放入内存,避免内存不足问题的一个潜在方法是将文件限制为仅搜索文本文件,如果可行的话,* 通过其文件扩展名 *;例如,您可以将
-Include *.txt, *.csv, ...
添加到Get-ChildItem
调用。