【问题标题】:Output difference of 2 txt files to a 3rd txt file将 2 个 txt 文件输出到第 3 个 txt 文件的差异
【发布时间】:2013-05-22 16:54:09
【问题描述】:

我正在尝试运行一个 bat 文件,它将一个文件与另一个文件进行比较并输出差异

我尝试使用 gnu diff utilites、fc 和无休止的谷歌搜索来寻找解决方案,但我似乎无法弄清楚

文件 1

C:\Books\Tolkien, J.R.R. - The Adventures Of Tom Bombadil.pdf
C:\Books\test.rtf.epub
C:\Books\w_E_20130215.epub

文件 2

C:\Books\test.rtf.epub
C:\Books\w_E_20130215.epub

我希望文件 3 是

C:\Books\Tolkien, J.R.R. - The Adventures Of Tom Bombadil.pdf

有人有什么想法吗?

【问题讨论】:

    标签: cmd diff filecompare


    【解决方案1】:

    您可以使用DiffUtils 中的diff 和类似的东西:

    diff file1.txt file2.txt | findstr /r /c:"^<" /c:"^>" >file3.txt
    

    输出行前面将有 &lt;&gt;,具体取决于相应行在哪个文件中丢失。如果您还想删除这些指示符,请使用以下内容:

    for /f "tokens=1*" %a in (
      'diff file1.txt file2.txt ^| findstr /r /c:"^<" /c:"^>"'
    ) do @echo %b >>file3.txt
    

    如果您想在批处理文件中运行,请将 %a%b 更改为 %%a%%b

    【讨论】:

    • 这实际上工作得很好。不得不做一些调整(推动和路径),但它就像一个魅力!谢谢!!
    • 它似乎在最后生成了一个空格。有什么办法阻止它这样做吗?我使用输出生成文件及其创建文件,如“XYZ .ext”编辑:NVM 我将其更改为 @echo %b>>file3.txt 并且它有效
    • 要么,要么将重定向放在行首:@&gt;&gt;file3.txt echo %b
    • 对此还有一些问题...当我尝试对以下两个文件使用相同的命令进行比较时。它仍然说有区别dl.dropboxusercontent.com/u/54973965/Musicconverttemp.txtdl.dropboxusercontent.com/u/54973965/DontconvertFormed.txt 这些文件包含相同的数据,但似乎一直在说一个中的行不在另一个中,反之亦然
    • 我终于弄明白了......这是排序顺序......我添加了sort %rundir%\temp\DontConvertformed.txt &gt;&gt; %rundir%\temp\DontConvertformedsorted.txt sort %rundir%\temp\Musicconverttemp.txt &gt;&gt; %rundir%\temp\Musicconverttempsorted.txt,它正在工作
    【解决方案2】:
    FINDSTR /v /b /e /l /g:file2. file1. >file3.
    

    应该产生所需的结果 - file2 中缺少 file1 中的行。

    /v 表示“未找到”,/b /e 强制完全匹配 - 不是部分行匹配 /l 文字。

    【讨论】:

    • 奇怪的是这会产生 C:\Books\w_E_20130215.epub
    • 只有那一行,还是另外?如果 FILE1 将报告最后一行。不以换行结束。您可以在 file1 中添加 e 换行符。使用echo(&gt;&gt;file1.(确保有两个&gt; 字符)或尝试type file1|FINDSTR /v /b /e /l /g:file2. &gt;file3.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多