Comparer les fichiers, y compris la nouvelle ligne finale

2

Je l' ai fait trois fichiers texte: 0nl.txt, 1nl.txtet 2nl.txt.

Ils ont tous deux le même contenu:

test
hello

La seule différence entre eux est le nombre de nouvelles lignes qu'ils ont après le dernier "o", avec respectivement 0, 1 et 2.

Je peux comparer les fichiers en utilisant 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, d'autre part, détecte qu'ils ont des tailles différentes mais ne montre pas les différences entre eux:

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.

Comment puis-je détecter la nouvelle ligne manquante dans par 0nl.txtrapport à 1nl.txt, et le montrer à l'utilisateur?

NeatNit
la source

Réponses:

2

Vous pouvez utiliser fc /n. Le /nparamètre est décrit comme suit :

/N    Display line numbers during an ASCII comparison.

Cela ressemblerait à ceci:

image

harrymc
la source
Cela ne fait pas ce dont j'ai besoin: FC ignore toujours la nouvelle ligne manquante dans 0nl.txt.
NeatNit
Le problème est-il que les nouvelles lignes sont des sauts de ligne de type Linux plutôt que des sauts de retour / des sauts de ligne de type Windows? Pourriez-vous poster ces deux fichiers?
harrymc
Non, ils ont tous été fabriqués avec le bloc-notes. J'ai réussi à comprendre, voir ma propre réponse - peut-être que cela clarifiera ce que je voulais dire.
NeatNit
0

Je l'ai résolu avec le code suivant:

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

Essentiellement, je fais d'abord une comparaison binaire, et si cela échoue, il doit y avoir une différence. Si une comparaison ASCII réussit plus tard, la différence doit être dans la nouvelle ligne finale.

NeatNit
la source