2014-03-19 48 views
0

我想查找給出字符串的文件。我正在使用下面的行如何獲取具有多個必需字符串的文件

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

但它是給文件有任何一個單詞「磁鐵」,「燉」。但是我想要兩個詞都有的文件。從邏輯上說,上述命令將其解釋爲「或」條件。我想要「和」條件。任何人都可以指導我如何做到這一點?

+0

可能的重複[如何使用PowerShell選擇字符串來查找文件中的多個模式?](http://stackoverflow.com/questions/3920383/how-to-use-powershell-select-string-找到多於一個模式的文件) –

回答

0

嘗試此您正則表達式:

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

編輯:

如果你正在尋找的文件的任何地方這些比賽:

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

張貼在鏈接CB解決方案提供的將會起作用,但是對於你需要做的事情來說效率並不高。 -SimpleMatch將比使用Regex模式更快,並且-Quiet開關將使其返回True或False,具體取決於它是否在文件中找到匹配項。如果其中一個或另一個條款出現在文件中的可能性較小,請更改該順序,以便在測試堆棧中首先出現一個,以便測試將盡快失敗,並且可以移至下一個文件。

+0

我認爲如果這兩個詞在不同的行中可能是一個問題。 –

+0

你說得對。如果它在文件中的任何地方,那麼如果你想在一次讀取操作中完成,select-string將不太適合解決方案。 – mjolinor

+0

也許可以使用'[system.io.file] :: ReadAllText()'完成,它總是返回一個字符串類型。 –

相關問題