比较文件(包括最后的换行符)

比较文件(包括最后的换行符)

我制作了三个文本文件0nl.txt1nl.txt2nl.txt

它们都有相同的内容:

test
hello

它们之间唯一的区别是最后一个“o”后面有多少个换行符,分别为 0、1 和 2。

我可以使用以下命令比较文件FC

C:\Users\NeatN\Desktop\fctest>fc 0nl.txt 1nl.txt
Comparing files 0nl.txt and 1NL.TXT
FC: no differences encountered


C:\Users\NeatN\Desktop\fctest>fc 0nl.txt 2nl.txt
Comparing files 0nl.txt and 2NL.TXT
***** 0nl.txt
***** 2NL.TXT

*****


C:\Users\NeatN\Desktop\fctest>fc 1nl.txt 2nl.txt
Comparing files 1nl.txt and 2NL.TXT
***** 1nl.txt
***** 2NL.TXT

*****

COMP另一方面,检测到它们有不同的大小,但没有显示它们之间的差异:

C:\Users\NeatN\Desktop\fctest>comp 0nl.txt 1nl.txt /M
Comparing 0nl.txt and 1nl.txt...
Files are different sizes.


C:\Users\NeatN\Desktop\fctest>comp 0nl.txt 2nl.txt /M
Comparing 0nl.txt and 2nl.txt...
Files are different sizes.


C:\Users\NeatN\Desktop\fctest>comp 1nl.txt 2nl.txt /M
Comparing 1nl.txt and 2nl.txt...
Files are different sizes.

我如何检测与0nl.txt相比缺少的换行符1nl.txt并将其显示给用户?

答案1

您可以使用fc /n/n参数是 描述作为 :

/N    Display line numbers during an ASCII comparison.

比较起来如下:

图像

答案2

我用下面的代码解决了它:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FC /B 0nl.txt 1nl.txt > NUL
IF !ERRORLEVEL! EQU 0 (ECHO TEST PASSED) ELSE (
    ECHO TEST FAILED - output doesn't match
    FC /N 0nl.txt 1nl.txt
    IF !ERRORLEVEL! EQU 0 ECHO There is a missing or extra newline character ^(\n^) at the end of the file
)

本质上,我首先进行二进制比较,如果比较失败,则肯定存在差异。如果稍后进行 ASCII 比较,则差异肯定在最后的换行符中。

相关内容