2016-09-05 11 views
1

にFILE2に存在しFILE1からの行の削除:私はすべてのFILE1.TXTから削除する私が含まれていFILE1.TXT持っPowerShellの

LINE1
LINE2
LINE3
LINE4

を別のFILE2.TXTに存在する行:

LINE3
LINE2

結果は次のようになります。

LINE1
LINE4

私は、このコマンドを使用しようとしましたが、それは私がFILE2.TXT内の1つの行がある場合にのみ機能します。

Get-Content C:\file1.txt | Where-Object {$_ -notmatch $(get-content C:\file2.txt)} 

注:Iドン」を2つのファイルを比較して、同じであるかどうかを確認します。

私はかなりpowershellに新しいです。

+2

は-match'、ここでの回答で、ほぼ同じことを説明し-in'代わりに 'の'使用します://stackoverflow.com/questions/39307707/how-to-match-source-files-in-multiple-subdirectories-with-a-list-and-then-copy-t/39309746 – TessellatingHeckler

+4

BTはPSをより速く学び、使用するPowerShell ISEでは、コードをデバッグして任意のキーワードでF1キーを押すと、内蔵のヘルプを表示できます(オンライン記事ほど完全ではないことがあります。また、コンソールに一致するトピックの一覧が表示されることもあります。再びF1)。 – wOxxOm

+0

"-in"と "ISE"について私は知らなかった。両方のおかげで! – Pozinux

答えて

1

次のコードスニペットは、同じ結果を達成するには、2つの異なる方法を示しています。http:

$filebefore="$env:TEMP\beforerestart.txt" # change to match your circumstances 
$file_after="$env:TEMP\after_restart.txt" # detto 

### Compare-Object way 
$array = Compare-Object $(Get-Content $filebefore) $(Get-Content $file_after) 
$array | where {$_.SideIndicator -eq "<="} | 
       Format-Table -Property InputObject -AutoSize -HideTableHeaders 

### -NotIn operator way 
$(Get-Content $filebefore) | 
    Where-Object {$_ -notIn $(Get-Content $file_after)} 
+0

-NotInの方法は私の場合のものです!ありがとう!しかし、ラインにアクセントキャラクタが含まれているとうまくいかない...何かヒント? – Pozinux

+0

@Pozinux FileSystemの['Get-Content'](https://technet.microsoft.com/en-us/library/hh847788.aspx)を読んで、' -Encoding'パラメータに適切な値を使用してください。 – JosefZ

+0

解決策を見つけました!あなたのクイックアンサーに感謝します。 – Pozinux

4

Compare-Objectは、2つのファイルの違いを取得するのに適しています。あなたが尋ねたことを達成するためのサンプルコードです。

$file1 = Get-Content C:\temp\file1.txt 
$file2 = Get-Content C:\temp\file2.txt 
$Diff = Compare-Object $File1 $File2 
$LeftSide = ($Diff | Where-Object $_.SideIndicator -eq '<=').InputObject 
$LeftSide | Set-Content C:\temp\file3.txt 
+0

次のエラーが表示されます。 'Where-Object:引数が 'FilterScript'にnullであるためバインドできません。 – RockPaperLizard

関連する問題