Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Windows 删除Powershell中文件2中存在的文件1中的行_Windows_File_Powershell - Fatal编程技术网

Windows 删除Powershell中文件2中存在的文件1中的行

Windows 删除Powershell中文件2中存在的文件1中的行,windows,file,powershell,Windows,File,Powershell,我有一个file1.txt,其中包含: 第1行 第2行 第3行 第4行 我想从file1.txt中删除另一个file2.txt中存在的所有行: 第3行 第2行 结果应该是: 第1行 第4行 我尝试使用此命令,但它仅在file2.txt中有一行时有效: Get-Content C:\file1.txt | Where-Object {$_ -notmatch $(get-content C:\file2.txt)} 注意:我不想比较两个文件,看它们是否相同 有什么想法吗?我对powershel

我有一个file1.txt,其中包含:

第1行
第2行
第3行
第4行

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

第3行
第2行

结果应该是:

第1行
第4行

我尝试使用此命令,但它仅在file2.txt中有一行时有效:

Get-Content C:\file1.txt | Where-Object {$_ -notmatch $(get-content C:\file2.txt)} 
注意:我不想比较两个文件,看它们是否相同


有什么想法吗?我对powershell非常陌生。

比较对象有助于获得两个文件之间的差异。下面是一些示例代码,用于完成您的要求

$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
$file1=获取内容C:\temp\file1.txt
$file2=获取内容C:\temp\file2.txt
$Diff=比较对象$File1$File2

$LeftSide=($Diff | Where Object$u.SideIndicator-eq'下一个代码段显示了实现相同结果的两种不同方法:

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

### 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)} 
$filebefore=“$env:TEMP\beforestreat.txt”#根据您的情况进行更改
$file_after=“$env:TEMP\after_restart.txt”#同上
###比较对象方式
$array=Compare Object$(获取内容$filebefore)$(获取内容$file\u after)

$array |其中{$\ SideIndicator-eq“使用
-in
而不是
-match
,在这里的答案中解释了几乎相同的事情:顺便说一句,要更快地学习PS,请使用PowerShell ISE,在那里您可以调试代码并按F1键查看内置帮助(注意,它不像在线文章那样完整,有时会在控制台中显示匹配主题的列表,在这种情况下,请选择一个,然后再次按F1)。对于我的情况,-NotIn way就是这样!谢谢!但当行包含重音字符时它不起作用…有什么提示吗?@Pozinux请阅读,为
-Encoding
参数使用适当的值。找到了解决方案!非常感谢您的快速回答。我收到以下错误:
Where Object:无法将参数绑定到参数'FilterScr'因为它是空的。
有什么想法吗?