2014-12-19 91 views
3

我想通過文件循環並刪除不需要的行。文件中的行具有不會更改的唯一編號。到目前爲止,我沒有在foreach循環中刪除該行,但分開執行。通過文件循環並刪除幾行不同的文本

$FSEFiles=get-childitem E:\FSE*.txt 

foreach ($file in $FSEFiles) 

{ 

    try 

    { 
     (Get-Content $file.PSPath) | 
     Foreach-Object { Where-Object { $_ -notmatch "[email protected]" } } | 
     Foreach-Object { Where-Object { $_ -notmatch "[email protected]" } } | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     #Foreach-Object {Where-Object { $_ -notmatch "[email protected]"}} | 
     Set-Content $file.PSPath 

     write-host $file updated 
    } 
    catch 
    { 
     write-host Error editing $file 
    } 
} 

我錯過了什麼可以讓這個循環在每一行工作嗎?

回答

3

既然你已經在使用正則表達式讓所有這些要求合併成一個漂亮的正則表達式字符串

$regex = "([email protected]|[email protected]|1752[6-8]@|1753[0-2]@)" 

$data = Get-Content $file.PSPath 
$data | Where-Object{$_ -notmatch $regex} | Set-Content $file.PSPath 

也許類似的東西會流線的。沒有真正的測試,但應該工作。你有什麼可能有效的工作,但有些東西似乎是foreachwhere(因此是問題)的組合,但嘗試和解決,我會認爲是多餘的。

+0

完美!這正是我所需要的。 謝謝。 – Alan

+0

很高興幫助。請考慮在左邊的選票下標上這個答案。 – Matt

相關問題