You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell对比文本文件导出差异行至新文件的新手求助

作为PowerShell新手,用Compare-Object没得到预期结果很正常——默认它会显示双向差异,而且输出的是对象而非纯文本行,咱们一步步来解决这个问题:

实现步骤与代码

核心思路:读取两个文件内容 → 对比找出仅在File 1.txt中存在的行 → 提取纯文本内容 → 写入diff.txt

1. 读取文件内容

先把两个文件的内容读到变量里,方便后续操作:

# 读取File 1.txt的内容
$file1Lines = Get-Content -Path "File 1.txt"
# 读取File 2.txt的内容
$file2Lines = Get-Content -Path "File 2.txt"

2. 对比并筛选目标行

用Compare-Object对比时,需要指定参考对象(ReferenceObject,即我们要检查的基准文件:File 1.txt)和差异对象(DifferenceObject,用来对比的文件:File 2.txt)。它会通过SideIndicator属性标记行的来源:

  • <=':表示该行只在ReferenceObject(File 1.txt)里存在
  • =>:表示该行只在DifferenceObject(File 2.txt)里存在

我们只需要筛选出带<='标记的行,再提取纯文本内容:

# 对比并筛选仅在File 1.txt中存在的行
$onlyInFile1 = Compare-Object -ReferenceObject $file1Lines -DifferenceObject $file2Lines | 
    Where-Object { $_.SideIndicator -eq '<=' } | 
    Select-Object -ExpandProperty InputObject

这里Select-Object -ExpandProperty InputObject是把对比结果里的具体行内容提取出来,避免输出对象的属性结构。

3. 写入新文件

最后把筛选出来的行写入diff.txt:

$onlyInFile1 | Out-File -Path "diff.txt" -Encoding UTF8

合并成一行简化版

如果想一步完成,也可以把命令合并:

Compare-Object -ReferenceObject (Get-Content "File 1.txt") -DifferenceObject (Get-Content "File 2.txt") | 
    Where-Object SideIndicator -eq '<=' | 
    Select-Object -Expand InputObject | 
    Out-File "diff.txt" -Encoding UTF8
关键注意事项
  • 如果你的文件使用特殊编码(比如GB2312),可以在Get-Content和Out-File里加上-Encoding GB2312参数适配
  • 若文件路径包含空格,一定要用引号括起来,否则PowerShell会识别错误

内容的提问来源于stack exchange,提问作者Gowtham Sarathy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:42:55