Porównaj pliki, w tym końcowy nowy wiersz

2

Zrobiłem trzy pliki tekstowe: 0nl.txt, 1nl.txti 2nl.txt.

Oba mają tę samą treść:

test
hello

Jedyną różnicą między nimi jest to, ile mają nowych linii po ostatnim „o”, odpowiednio 0, 1 i 2.

Mogę porównywać pliki za pomocą 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, z drugiej strony, wykrywa, że ​​mają różne rozmiary, ale nie pokazuje różnic między nimi:

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.

Jak wykryć brakujący nowy wiersz w 0nl.txtporównaniu z nim 1nl.txti pokazać go użytkownikowi?

NeatNit
źródło

Odpowiedzi:

2

Możesz użyć fc /n. /nParametr jest opisany jako:

/N    Display line numbers during an ASCII comparison.

Wyglądałoby to na porównanie w następujący sposób:

wizerunek

harrymc
źródło
To nie robi tego, czego potrzebuję: FC nadal ignoruje brakujący nowy wiersz w 0nl.txt.
NeatNit
Czy problem polega na tym, że nowe wiersze są kanałami zwrotnymi typu Linux, a nie kanałami powrotu / wierszy typu Windows? Czy możesz opublikować te dwa pliki?
harrymc
Nie, wszystkie zostały wykonane przy pomocy notatnika. Udało mi się to rozgryźć, zobaczyć własną odpowiedź - może to wyjaśni, co miałem na myśli.
NeatNit
0

Rozwiązałem go za pomocą następującego kodu:

@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
)

Zasadniczo najpierw dokonuję porównania binarnego, a jeśli to się nie powiedzie, musi istnieć różnica. Jeśli porównanie ASCII przejdzie później, różnica musi być w ostatnim nowym wierszu.

NeatNit
źródło