Sie können verwenden fc /n
. Der /n
Parameter wird beschrieben als:
/N Display line numbers during an ASCII comparison.
Dies würde bei einem Vergleich so aussehen:
Ich habe drei Textdateien gemacht: 0nl.txt
, 1nl.txt
und 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 *****
COMP
erkennt 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.txt
Vergleich zu 1nl.txt
und zeige sie dem Benutzer?
Sie können verwenden fc /n
. Der /n
Parameter wird beschrieben als:
/N Display line numbers during an ASCII comparison.
Dies würde bei einem Vergleich so aussehen:
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.