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

时间:2015-02-26 06:22:13

标签: windows-7 cmd

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

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

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-opens-new-Rochester-branch-5da.aspx

3 个答案:

答案 0 :(得分:2)

如果您已Windows PowerShell 2.0已安装,则无需下载Windows 7

cmd.exe命令行:

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

注意:

  • 删除–IncludeEqual(仅为piquancy添加);
  • 请注意,|管道已^|转义以将其传递给PowerShell,而不是在cmd中对其进行处理;
  • -Width 4096更改为所需的输出行长度(整数范围)。任何其他字符都会被截断,而不会被包装。如果省略此参数,则宽度由主机的特征决定。 Windows PowerShell控制台的默认值为80(字符);
  • 这里有一个巨大的script repository(使用 PowerShell 进行文件操作过滤器提供的链接);
  • 此处是Compare-Object Cmdlet参考。

要查看SideIndicator输出格式,请忽略^| Out-File ...,如下所示。您应该在屏幕上截断输出。

powershell Compare-Object -ReferenceObject (Get-Content abc.txt) -DifferenceObject (Get-Content xyz.txt)  –IncludeEqual

使用alias names for Cmdlets并省略 PowerShell 语句的可选部分,下一个命令应该给出相同的结果:

powershell diff  (type abc.txt)  (gc xyz.txt) -includeequal 

答案 1 :(得分:0)

“但我获得的某些字符串的输出会转到第二行,这会将我的网址划分为两条不同的行

当一行包含超过127个字符时,

fc有一个错误。

它已针对Windows XP和Windows Vista进行了修复,但不适用于Windows 7。

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


来源where are known errors in fc.exe for windows 7 published

  

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

...

Windows XP和Windows Vista都有热修复程序。我没有看到一个Windows 7

  

文章ID:953930 - 当您比较的两个文件在字符串中的第128个字节周围有TAB或SPACE字符时,Fc.exe命令在基于Windows XP的计算机上无法正常工作   http://support.microsoft.com/kb/953930

     

文章ID:953932 - 当您比较的两个文件在字符串中的第128个字节周围有TAB或SPACE字符时,Fc.exe命令在Windows Vista或Windows Server 2008中无法正常工作   http://support.microsoft.com/kb/953932

答案 2 :(得分:0)

我建议你试试

findstr /i /L /x /v  /g:xyz.txt abc.txt > unique.txt

应报告abc.txtxyz.txt中不存在的任何行/i /L忽略大小写,/x字面意思,无正则表达式,/v - 完全匹配,而不是在不匹配的部分行abc.txt行上

因此,xyz.txt中{strong} <{1}}中{@ 1}}中显示的任何行都将定向到unique.txt(tks JosefZ)