Вы можете использовать fc /n
. /n
Параметр описывается как:
/N Display line numbers during an ASCII comparison.
Это будет выглядеть при сравнении так:
Я сделал три текстовые файлы: 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
и показать его пользователю?
Вы можете использовать fc /n
. /n
Параметр описывается как:
/N Display line numbers during an ASCII comparison.
Это будет выглядеть при сравнении так:
Я решил это с помощью следующего кода:
@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 проходит позже, тогда разница должна быть в последнем переводе строки.