Vergleichen Sie die Dateien einschließlich der letzten Zeilenumbrüche

414
NeatNit

Ich habe drei Textdateien gemacht: 0nl.txt, 1nl.txtund 2nl.txt.

Sie haben beide den gleichen Inhalt:

test hello 

Der einzige Unterschied besteht darin, wie viele Zeilenumbrüche sie nach dem abschließenden 'o' haben, mit 0, 1 bzw. 2.

Ich kann die Dateien mit Hilfe von vergleichen 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  ***** 

COMPerkennt jedoch, dass sie unterschiedliche Größen haben, zeigt jedoch nicht die Unterschiede zwischen ihnen:

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. 

Wie erkenne ich die fehlende Newline im 0nl.txtVergleich zu 1nl.txtund zeige sie dem Benutzer?

2

2 Antworten auf die Frage

2
harrymc

Sie können verwenden fc /n. Der /nParameter wird beschrieben als:

/N Display line numbers during an ASCII comparison. 

Dies würde bei einem Vergleich so aussehen:

Bild

Das tut nicht was ich brauche: FC ignoriert immer noch die fehlende Zeile in 0nl.txt. NeatNit vor 5 Jahren 0
Ist das Problem, dass die Zeilenumbrüche Zeilen vom Typ Linux sind und nicht vom Windows-Typ Wagenrücklauf / Zeilenvorschub? Könnten Sie diese beiden Dateien posten? harrymc vor 5 Jahren 0
Nein, sie wurden alle mit Notizblock gemacht. Ich habe es geschafft, meine eigene Antwort zu finden - vielleicht wird das klarstellen, was ich meinte. NeatNit vor 5 Jahren 0
0
NeatNit

Ich habe es mit folgendem Code gelöst:

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

Im Wesentlichen mache ich zuerst einen binären Vergleich, und wenn dies fehlschlägt, muss es einen Unterschied geben. Wenn ein ASCII-Vergleich später erfolgreich ist, muss der Unterschied in der letzten Zeile liegen.