Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何获取具有多个必需字符串的文件_Powershell - Fatal编程技术网

Powershell 如何获取具有多个必需字符串的文件

Powershell 如何获取具有多个必需字符串的文件,powershell,Powershell,我正在尝试查找给定字符串的文件。我正在使用下面的行 Get-ChildItem -recurse | Select-String -pattern "Magnet","Stew" | group path | select name 但它给出的文件中有“磁铁”、“炖肉”这三个词中的任何一个。但是我想要两个字都有的文件。从逻辑上讲,上述命令将其解释为“或”条件。我想要“和”条件。有人能告诉我怎么做吗?试试你的正则表达式: '.*(?:stew.*magnet)|(?:magnet.*stew)

我正在尝试查找给定字符串的文件。我正在使用下面的行

 Get-ChildItem -recurse | Select-String -pattern "Magnet","Stew" | group path | select name

但它给出的文件中有“磁铁”、“炖肉”这三个词中的任何一个。但是我想要两个字都有的文件。从逻辑上讲,上述命令将其解释为“或”条件。我想要“和”条件。有人能告诉我怎么做吗?

试试你的正则表达式:

'.*(?:stew.*magnet)|(?:magnet.*stew).*'
编辑:

如果要在文件中的任何位置查找这些匹配项:

Get-ChildItem -Recurse |
 where {(
          ($_ | Select-String -Pattern 'Stew' -SimpleMatch -Quiet) -and
          ($_ | Select-String -Pattern 'Magnet' -SimpleMatch -Quiet)
         )}

在CB提供的链接上发布的解决方案会起作用,但对于您需要做的事情来说似乎不是很有效。
-SimpleMatch
将比使用正则表达式模式更快,而
-Quiet
开关将使其仅返回True或False,这取决于它在文件中是否找到匹配项。如果一个或另一个术语不太可能出现在文件中,请更改顺序,使其中一个术语出现在测试堆栈中的第一位,以便测试更快失败,并可以转到下一个文件。

我认为如果这两个词在不同的行中,可能会出现问题。你是对的。如果它在文件中的任何位置,那么如果您想在一次读取操作中执行,那么选择字符串将不适合该解决方案。可能使用
[system.io.file]::ReadAllText()
,它总是返回字符串类型。或者获取Content-Raw,并将正则表达式更改为多行。但是,大文件可能会导致内存问题。可能存在重复的