2

Я сделал три текстовых файла: 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

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

/N    Display line numbers during an ASCII comparison.

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

образ

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .