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?

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.