Сравнить файлы, включая заключительный перевод строки

337
NeatNit

Я сделал три текстовые файлы: 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и показать его пользователю?

2

2 ответа на вопрос

2
harrymc

Вы можете использовать fc /n. /nПараметр описывается как:

/N Display line numbers during an ASCII comparison. 

Это будет выглядеть при сравнении так:

image

Это не делает то, что мне нужно: FC по-прежнему игнорирует отсутствующий символ новой строки в 0nl.txt. NeatNit 5 лет назад 0
Является ли проблема в том, что переводы строки - это перевод строки типа Linux, а не возврат каретки / перевод строки типа Windows? Не могли бы вы опубликовать эти два файла? harrymc 5 лет назад 0
Нет, все они были сделаны с помощью блокнота. Мне удалось выяснить это, увидеть мой собственный ответ - может быть, это прояснит, что я имел в виду. NeatNit 5 лет назад 0
0
NeatNit

Я решил это с помощью следующего кода:

@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 проходит позже, тогда разница должна быть в последнем переводе строки.