Windows 7 使用命令提示符进行文件比较

Windows 7 使用命令提示符进行文件比较,windows-7,cmd,Windows 7,Cmd,我想使用命令提示符比较两个文本文件,我正在使用两个名为abc和xyz的文本文件。我需要其他文本文件中的唯一记录。但我得到的一些字符串的输出将进入第二行,这将我的URL分成两行,有没有任何方法可以比较它们,并以与现有文本文件相同的格式得到输出 fc abc.txt xyz.txt > unique.txt abc文件包含如下数据 newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-bran

我想使用命令提示符比较两个文本文件,我正在使用两个名为abc和xyz的文本文件。我需要其他文本文件中的唯一记录。但我得到的一些字符串的输出将进入第二行,这将我的URL分成两行,有没有任何方法可以比较它们,并以与现有文本文件相同的格式得到输出

fc abc.txt xyz.txt > unique.txt
abc文件包含如下数据

newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-Bank-finances-12M-for-retail-and-residential-projects-5dc.aspx
newsroom.associatedbank.com/News-Releases/Associated-Banc-Corp-completes-purchase-of-risk-and-benefits-consulting-firm-Ahmann-Martin-Co-5db.aspx
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx
newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx
xyz文件包含如下数据

newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-Bank-finances-12M-for-retail-and-residential-projects-5dc.aspx
newsroom.associatedbank.com/News-Releases/Associated-Banc-Corp-completes-purchase-of-risk-and-benefits-consulting-firm-Ahmann-Martin-Co-5db.aspx
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx
newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx

如果您有
Windows 7
,则不必下载
Windows PowerShell 2.0
,因为它已经安装

cmd.exe
命令行:

powershell Compare-Object -ReferenceObject (Get-Content abc.txt) -DifferenceObject (Get-Content xyz.txt)  –IncludeEqual ^| Out-File -FilePath unique.txt -Width 4096
注:

  • 删除
    –IncludeEqual
    (仅为辣味添加)
  • 请注意,
    |
    管道被转义以将其传递给PowerShell,而不是在
    cmd
    中处理它
  • 将宽度4096更改为所需的输出线长度(整数范围)。任何附加字符都将被截断,而不是包装。如果忽略此参数,则宽度由主体的特征决定。Windows PowerShell控制台的默认值为80(个字符)
  • 这里有一个巨大的链接(通过PowerShell提供的过滤器到文件操作的链接)
  • 这里有一个参考资料
要查看
SideIndicator
输出格式,请省略
^ | Out File…
,如下所示。您应该在屏幕上得到截断的输出

powershell Compare-Object -ReferenceObject (Get-Content abc.txt) -DifferenceObject (Get-Content xyz.txt)  –IncludeEqual
使用或省略PowerShell语句的可选部分,下一个命令应给出相同的结果:

powershell diff  (type abc.txt)  (gc xyz.txt) -includeequal 
“但是我得到的一些字符串的输出将转到第二行,这将我的URL分成两行

fc
在一行包含超过127个字符时存在错误

它已被Windows XP和Windows Vista热修复,但不适用于Windows 7

它在Windows 7中无法正常工作(使用32位或64位
fc.exe
) 当命令比较包含任何ASCII或UNICODE记录的文件时,该记录中的字符数超过127个


来源

我创建了两个测试文件xxx.txt和yyy.txt,它们在第nnn行不同,但fc/n报告它们在第nnn+1行不同。fc似乎已将前一行的一个拆分为两行。使用十六进制编辑器检查文件时,在fc拆分行的位置没有显示任何行尾字符0D或0A的痕迹。对于较大的文件,fc报告的不匹配位置与发生不匹配的实际行严重不同步。 这是fc中已知的错误吗?该程序中此类已知问题的公开列表在哪里


有针对Windows XP和Windows Vista的热修复程序。我看不到适用于Windows7的

项目ID:953930-如果要比较的两个文件在字符串中的128字节附近有制表符或空格字符,则Fc.exe命令在基于Windows XP的计算机上无法正常工作

项目ID:953932-当您正在比较的两个文件在字符串中的128字节附近有制表符或空格字符时,Fc.exe命令在Windows Vista或Windows Server 2008中无法正常工作

我建议你试试

findstr /i /L /x /v  /g:xyz.txt abc.txt > unique.txt
它应该报告
abc.txt
中没有出现在
xyz.txt
中的任何行(
/i
忽略大小写,
/L
字面上,没有正则表达式,
/x
-精确匹配,而不是在不匹配的部分行上)


因此,
abc.txt
中任何未出现在
xyz.txt
中的行都将被定向到
unique.txt
(tks JosefZ)

可能重复。看到我的评论了吗,现在在
Win-8
上检查了一下,还有什么解决办法吗?说真的,当时在
XP
上,我没有寻找答案。尝试Powershell…我使用的是Windows 7请将您的问题包括在unique.txt中“有适用于Windows XP和Windows Vista的修补程序。我没有看到适用于Windows 7的修补程序”-这些修补程序是在2008年发布的。W7是在2009年7月发布的,所以我们假设修复是向前滚动的。我在Windows7上尝试了OP的问题,得到了相同的结果。在Windows 7中,它似乎还没有被修复。做得很好,但是
/X
开关意味着打印完全匹配的行。改用
/V
(或者更进一步?):只打印不包含匹配项的行,因为OP需要其他文本文件中的唯一记录。考虑1次运行两次。代码>/g:xyz.txt abc.txt>unique.txt和2
/g:abc.txt xyz.txt>>unique.txt
…我只需要abc.txt文件中的唯一记录,但我仍然无法获取该记录