我制作了三个文本文件0nl.txt
:1nl.txt
和2nl.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
答案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 比较,则差异肯定在最后的换行符中。