Quel est l'équivalent Windows de la commande diff?

284

Je sais qu'il existe un article similaire à celui-ci: ici .
J'ai essayé d'utiliser la compcommande comme elle l'a mentionné, mais si j'ai deux fichiers, l'un avec des données comme "abcd" et l'autre avec des données "abcde", cela dit simplement que les fichiers sont de tailles différentes. Je voulais savoir où exactement ils diffèrent. Sous Unix, le simple diff me dit quelle ligne et quelle colonne, la commande comp dans windows fonctionne si j'ai quelque chose comme "abd" et "abc". Pas autrement. Des idées que je peux utiliser pour cela?

wittythotha
la source

Réponses:

461

Exécutez ceci dans le shell ou le fichier batch CMD:

FC file1 file2

FC peut également être utilisé pour comparer des fichiers binaires:

FC /B file1 file2
Andriy M
la source
3
Comment procédez-vous avec tous les fichiers modifiés dans deux dossiers? Comme, je compare le contenu du dossier1 au contenu du dossier2: des lignes modifiées dans le dossier2 apparaissent-elles?
Wolfpack'08
17
@ Wolfpack'08 ": FC path1\* FC path2\*comparerait tous les fichiers des dossiers path1et path2, à condition qu'ils (les fichiers) aient des noms identiques. S'il y a des fichiers dont les noms ne correspondent pas, FC signalerait un fichier manquant, mais uniquement pour les fichiers du premier dossier qui ne sont pas pas trouvé dans le deuxième dossier et non l'inverse. Pour attraper toutes les discordances, une technique différente serait probablement nécessaire.
Andriy M
@AndriyM Donc, de nouveaux fichiers entraîneraient une erreur de FC sans renvoyer de lignes réelles? Seul le message d'erreur?
Wolfpack'08
1
@ Wolfpack'08: Oui, juste le message sur l'homologue manquant, pas de lignes de la partie existante. (Mais cela ne mettrait pas fin au traitement d'autres paires de fichiers existantes et leur comparaison serait toujours effectuée, si c'est ce que vous demandiez.)
Andriy M
@AndriyM Donc, vous voulez dire: "Si erreur: files in both directories are diff'd; files in only one directory throw errors." Intéressant. Mais il y a sûrement un programme tiers équivalent à diff?
Wolfpack'08
36

Eh bien, sous Windows, je lance avec plaisir diffet de nombreux autres outils GNU. Vous pouvez le faire avec cygwin , mais je préfère personnellement GnuWin32 car c'est une expérience d'installation beaucoup plus légère.

Donc, ma réponse est que l'équivalent Windows de diff, n'est autre que difflui-même!

David Heffernan
la source
1
L'installation de base de Cygwin ne semble pas inclure de diff. Quels packages supplémentaires dois-je installer pour l'obtenir?
Warren Dew
7
Je ne recommande pas cygwin. J'utiliserais un port natif Win32 de diff
David Heffernan
1
@WarrenDew Le package Cygwin dont vous avez besoin est diffutils. Voir cygwin.com/cgi-bin2/…
Steve
24

Winmerge a un utilitaire de ligne de commande qui pourrait être utile de vérifier.

En outre, vous pouvez également en utiliser la partie graphique en fonction de vos besoins.

Robert Greiner
la source
2
Bien que ce ne soit pas un utilitaire Windows intégré, je le recommande vivement - il est open-source, léger et d'après mon expérience, sans bogue.
david.barkhuizen
19

Une autre alternative est de télécharger et d'installer git à partir d' ici . Ensuite, ajoutez le chemin d'accès Git\bin\à votre PATHvariable. Cela vous donnera non seulement des différences, mais également de nombreuses autres commandes Linux que vous pouvez utiliser à partir de la ligne de commande Windows.

Vous pouvez définir la PATHvariable en cliquant avec le bouton droit sur Ordinateur et en sélectionnant Propriétés. Ensuite, vous pouvez cliquer sur Paramètres système avancés sur le côté gauche de l'écran. Dans la fenêtre contextuelle, cliquez sur Variables d'environnement, puis ajoutez ou mettez à jour la variable PATH dans vos variables utilisateur avecGit\bin\

Documentation Git diff

Tim Hutchison
la source
@firelight - merci pour votre réponse. Pouvez-vous élaborer ce que vous voulez dire ici: "Ensuite, ajoutez le chemin d'accès à Git \ bin \ à votre variable PATH."
BKSpurgeon
2
@BKSpurgeon - Si vous cliquez avec le bouton droit sur Ordinateur et sélectionnez Propriétés, vous pouvez cliquer sur Paramètres système avancés sur le côté gauche de l'écran. Dans la fenêtre contextuelle, cliquez sur Variables d'environnement, puis ajoutez ou mettez à jour la variable PATH dans vos variables utilisateur avec Git \ bin \
Tim Hutchison
@JustinCormack Avez-vous des références à ce sujet? Je viens d'essayer le diff dans Git Bash et cela a fonctionné
Tim Hutchison
3
@Tim Hutchison, d'après votre réponse: "Cela vous donnera non seulement des différences, mais aussi de nombreuses autres commandes Linux que vous pouvez utiliser à partir de la ligne de commande Windows." - lesquels voulez-vous dire? Quand on installe Git, il / elle devrait avoir juste des git...exécutables disponibles à partir du PATH. De plus, la réponse devrait probablement inclure une information importante: vous devez lancer l'outil de diff en écrivant git diff, pas seulement diff.
Petr Bodnár,
mec, c'est totalement un autre diff
vintproykt
14

FC fonctionne très bien dans mon cas, cela n'a pas été utile car je voulais juste les lignes qui sont modifiées. Et FC donne des données supplémentaires comme le nom de fichier, les mêmes lignes et la comparaison bilatérale.

    >fc data.txt data.txt.bak   
    ***** DATA.TXT
    ####09
    ####09
    ####09
    ***** DATA.TXT.BAK
    ####09
    ####08
    ####09

mais dans mon cas, je ne voulais que les lignes qui ont changé et je voulais que ces lignes soient exportées vers un fichier différent, sans autre en-tête ou données.

J'ai donc utilisé "findstr" pour comparer le fichier:

findstr /V /G:data.txt.bak data.txt >DiffResult.txt

où :

data.txt.bak est le nom de l'ancien fichier

data.txt est le nom du nouveau fichier

DiffResult.txt contient les données modifiées, c'est-à-dire une seule ligne #### 09

Nimish Choudhary
la source
1
/ Une seule première ligne et une dernière ligne de bloc modifiées / N afficher les numéros de ligne
Lukas
10

fc. fc est meilleur pour gérer des fichiers volumineux (> 4 Go) que le diff de Cygwin.

nerdfever.com
la source
10

Il y a aussi Powershell (qui fait partie de Windows). Ce n'est pas rapide mais c'est flexible, voici la commande de base. Les gens ont écrit diverses applets de commande et scripts pour cela si vous avez besoin d'un meilleur formatage.

PS C:\Users\Troll> Compare-Object (gc $file1) (gc $file2)

Ne fait pas partie de Windows, mais si vous êtes développeur avec Visual Studio, il est fourni avec WinDiff (graphique)

Mais mon préféré est BeyondCompare, qui coûte 30 $.

Paul Williams
la source
4

DiffUtils est probablement votre meilleur pari. C'est l'équivalent Windows de diff.

À ma connaissance, il n'y a pas d'équivalents intégrés.

mattkelly
la source
J'ai également utilisé cela, cependant, aujourd'hui, j'ai découvert que la très ancienne version 2.8.7 fournie sur cette page présente un bogue (lors de la comparaison de certains fichiers PDF, ils sont signalés comme égaux). Alors maintenant, je préfère le "git diff" comme suggéré par firelight.
anre
4

La raison pour laquelle vous obtenez l'erreur avec COMP est que l'utilitaire suppose que les fichiers que vous comparez sont de la même taille. Pour surmonter cela, vous pouvez utiliser l' '/n'option avec laquelle vous pouvez spécifier le nombre de lignes que vous souhaitez comparer. (voir les options prises en charge par comp en tapant 'comp /?'sur la ligne de commande. pour que votre commande ressemble à:

C:\>comp "filepath1" "filepath2" /a /l /n=(the number of lines you want to compare) /c 

Cela devrait résoudre votre problème si vous souhaitez continuer à utiliser COMP. Mais ce sera un problème pour les très gros fichiers.

Bien que ce compsoit une option, mais je pense que c'est primitif et FCc'est une meilleure option. vous pouvez utiliser FORFILESet FCensemble pour créer un très bon utilitaire de comparaison de fichiers si vous en avez besoin fréquemment.

FC est utilisé de cette façon pour ref:

C:\>fc /c(case insensistive) /lbn(number of errors allowed before you wanna stop compare) /n(display line number) "filename1" "filename2"

il existe de nombreuses options disponibles que vous pouvez voir en 'fc /?' espérant que cela aide

proximace
la source
2

J'ai trouvé un logiciel graphique léger pour Windows qui semble utile en l'absence de diffcommande. Cela pourrait résoudre tous mes problèmes.

WinDiff http://www.grigsoft.com/download-windiff.htm

Ahmad
la source
0

Je ne sais pas si l'outil suivant est exactement ce dont vous avez besoin. Mais j'aime utiliser, pour des fichiers spécifiques, un outil en ligne. De cette façon, je peux l'utiliser quel que soit le système d'exploitation. Voici un exemple: diffchecker.com

Mais pour mes besoins, je suppose que le meilleur outil pour suivre les modifications et les journaux des fichiers de mon projet est GIT. Si vous travaillez en équipe, vous pouvez avoir un dépôt en ligne sur l'un de vos serveurs, ou l'utiliser avec Bitbucket ou Github.

J'espère que ça aide quelqu'un.

Pedro Acácio
la source
0

Si vous avez installé git sur votre machine, vous pouvez ouvrir un terminal git et utiliser simplement la diffcommande Linux comme d'habitude.

falsePockets
la source