【问题标题】:File comparison using command prompt使用命令提示符进行文件比较
【发布时间】:2015-04-28 10:29:22
【问题描述】:

我想使用命令提示符比较两个文本文件,我正在使用名称为 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

【问题讨论】:

  • 可能重复 fc.exe: command line tool in windows 8。在那里查看我的评论,现在也检查了Win-8
  • 有什么解决办法吗?
  • 真的,当时在XP,我没找。试试 Powershell ...
  • 我使用的是 Windows 7
  • Pleaqse edit 你的问题要包含唯一的.txt

标签: windows-7 cmd


【解决方案1】:

如果您有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 中处理它;
  • -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 

【讨论】:

    【解决方案2】:

    建议你试试

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

    它应该报告abc.txt 中不存在于xyz.txt 中的任何行(/i 忽略大小写,/L 从字面上看,没有正则表达式,/x - 完全匹配,不在部分行上@987654327 @ 不匹配的行)

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

    【讨论】:

    • 干得好,但/X 开关的意思是打印完全匹配的行。改用/V(或者?):仅打印不包含匹配项的行,因为 OP 需要 在其他 文本文件中中的唯一记录。考虑运行两次 1./g:xyz.txt abc.txt > unique.txt 和 2./g:abc.txt xyz.txt >> unique.txt...
    • 我只需要 abc.txt 文件中的唯一记录,但我仍然无法得到它
    【解决方案3】:

    “但是我得到的一些字符串的输出将继续到第二行,这将我的网址分成两个单独的行

    fc 在一行包含超过 127 个字符时会出现错误。

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

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


    来源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

    【讨论】:

    • “有适用于 Windows XP 和 Windows Vista 的修补程序。我没有看到适用于 Windows 7 的修补程序”- 修补程序于 2008 年发布。W7 于 2009 年 7 月发布,所以我们假设该修复程序已前滚。
    • 我在 Windows 7 上尝试了 OP 的问题并得到了相同的结果。它似乎在 Windows 7 中尚未修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2014-06-02
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多