删除Powershell中file2中存在的行

我有一个file1.txt包含:

一号线
2号线
3号线
4号线

我想从file1.txt中删除另一个file2.txt中存在的所有行:

3号线
2号线

结果应该是:

一号线
4号线

我试图使用这个命令,但它只有在file2.txt中有一行时才起作用:

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

注意:我不想比较两个文件,看它们是否相同。

任何想法? 我很新的PowerShell。

下面的代码片断显示了两种不同的方式来实现相同的结果:

 $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)} 

比较对象是有利于获得两个文件之间的差异。 这是一些示例代码来完成你所要求的。

 $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