Was ist das Windows-Äquivalent des Befehls diff?

284

Ich weiß, dass es einen ähnlichen Beitrag gibt: hier .
Ich habe versucht, den compBefehl wie erwähnt zu verwenden, aber wenn ich zwei Dateien habe, eine mit Daten wie "abcd" und die andere mit Daten "abcde", heißt es nur, dass die Dateien unterschiedliche Größen haben. Ich wollte wissen, wo genau sie sich unterscheiden. Unter Unix sagt mir der einfache Diff, welche Zeile und Spalte der Befehl comp in Windows funktioniert, wenn ich so etwas wie "abd" und "abc" habe. Nicht anders. Irgendwelche Ideen, was ich dafür verwenden kann?

wittythotha
quelle

Antworten:

461

Führen Sie dies in der CMD-Shell oder Batch-Datei aus:

FC file1 file2

FC kann auch zum Vergleichen von Binärdateien verwendet werden:

FC /B file1 file2
Andriy M.
quelle
3
Wie machen Sie das mit allen geänderten Dateien in zwei Ordnern? Ich vergleiche den Inhalt von Ordner1 mit dem Inhalt von Ordner2: Werden geänderte Zeilen in Ordner2 angezeigt?
Wolfpack'08
17
@ Wolfpack'08 ": FC path1\* FC path2\*würde alle Dateien in den Ordnern vergleichen path1und path2, sofern sie (die Dateien) identische Namen haben. Wenn Dateien mit nicht übereinstimmenden Namen vorhanden sind, würde FC eine fehlende Datei melden, jedoch nur für die Dateien des ersten Ordners, die nicht vorhanden sind Wird nicht im zweiten Ordner gefunden und nicht umgekehrt. Um alle Fehlpaarungen zu erkennen, wäre wahrscheinlich eine andere Technik erforderlich.
Andriy M
@AndriyM Neue Dateien würden also dazu führen, dass FC einen Fehler verursacht, ohne dass tatsächliche Zeilen zurückgegeben werden? Nur die Fehlermeldung?
Wolfpack'08
1
@ Wolfpack'08: Ja, nur die Nachricht über das fehlende Gegenstück, keine Zeilen von der bestehenden Partei. (Aber das würde die Verarbeitung anderer, vorhandener Dateipaare nicht beenden und deren Vergleich würde immer noch durchgeführt, wenn Sie danach fragen.)
Andriy M
@AndriyM Du meinst also sagen: "Wenn Fehler: files in both directories are diff'd; files in only one directory throw errors." Interessant. Aber sicherlich gibt es ein Drittanbieterprogramm, das diff entspricht?
Wolfpack'08
36

Nun, unter Windows laufe ich glücklich diffund viele andere der GNU-Tools. Sie können es mit Cygwin machen , aber ich persönlich bevorzuge GnuWin32, weil es eine viel leichtere Installationserfahrung ist.

Meine Antwort lautet also, dass das Windows-Äquivalent von diffnichts anderes als sich diffselbst ist!

David Heffernan
quelle
1
Die Basisinstallation von Cygwin scheint diff nicht zu enthalten. Welche zusätzlichen Pakete muss ich installieren, um es zu bekommen?
Warren Dew
7
Ich empfehle Cygwin nicht. Ich würde einen nativen Win32-Port von diff verwenden
David Heffernan
1
@WarrenDew Das Cygwin-Paket, das Sie benötigen, ist diffutils. Siehe cygwin.com/cgi-bin2/…
Steve Pitchers
24

Winmerge verfügt über ein Befehlszeilenprogramm, das möglicherweise einen Besuch wert ist.

Sie können auch den grafischen Teil verwenden, je nachdem, was Sie benötigen.

Robert Greiner
quelle
2
Obwohl dies kein integriertes Windows-Dienstprogramm ist, kann ich es nur empfehlen - es ist Open Source, leicht und meiner Erfahrung nach fehlerfrei.
David.Barkhuizen
19

Eine andere Alternative ist das Herunterladen und Installieren von git von hier . Fügen Sie dann den Pfad Git\bin\zu Ihrer PATHVariablen hinzu. Dadurch erhalten Sie nicht nur diff, sondern auch viele andere Linux-Befehle, die Sie über die Windows-Befehlszeile verwenden können.

Sie können die PATHVariable festlegen , indem Sie mit der rechten Maustaste auf Computer klicken und Eigenschaften auswählen. Dann können Sie auf der linken Seite des Bildschirms auf Erweiterte Systemeinstellungen klicken. Klicken Sie im Popup auf Umgebungsvariablen und fügen Sie dann die PATH-Variable in Ihren Benutzervariablen hinzu oder aktualisieren Sie sie mitGit\bin\

Git Diff Dokumentation

Tim Hutchison
quelle
@firelight - danke für deine Antwort. Können Sie näher erläutern, was Sie hier meinen: "Fügen Sie dann den Pfad zu Git \ bin \ zu Ihrer PATH-Variablen hinzu."
BKSpurgeon
2
@BKSpurgeon - Wenn Sie mit der rechten Maustaste auf Computer klicken und Eigenschaften auswählen, können Sie auf der linken Seite des Bildschirms auf Erweiterte Systemeinstellungen klicken. Klicken Sie im Popup auf Umgebungsvariablen und fügen Sie dann die PATH-Variable in Ihren Benutzervariablen hinzu oder aktualisieren Sie sie mit Git \ bin \
Tim Hutchison
@ JustinCormack Hast du irgendwelche Referenzen dafür? Ich habe gerade Diff in Git Bash ausprobiert und es hat funktioniert
Tim Hutchison
3
@ Tim Hutchison, aus Ihrer Antwort: "Dies gibt Ihnen nicht nur diff, sondern auch viele andere Linux-Befehle, die Sie über die Windows-Befehlszeile verwenden können." - Welche meinst du? Wenn man Git installiert, sollte man nur git...ausführbare Dateien aus dem PATH zur Verfügung haben. Darüber hinaus sollte die Antwort wahrscheinlich eine wichtige Information enthalten: Sie müssen das Diff-Tool git diffnicht nur schriftlich starten diff.
Petr Bodnár
Alter, das ist ganz diff
anders
14

FC funktioniert großartig, in meinem Fall war es nicht hilfreich, da ich nur die Zeilen wollte, die geändert werden. Und FC geben zusätzliche Daten wie Dateiname, gleiche Zeilen und bilateralen Vergleich.

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

In meinem Fall wollte ich jedoch nur die Zeilen, die sich geändert haben, und wollte, dass diese Zeilen ohne andere Header oder Daten in eine andere Datei exportiert werden.

Also habe ich "findstr" verwendet , um die Datei zu vergleichen:

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

wo :

data.txt.bak ist der Name der alten Datei

data.txt ist der Name der neuen Datei

DiffResult.txt enthält die Daten, die geändert werden, dh nur eine Zeile #### 09

Nimish Choudhary
quelle
1
/ Eine einzige erste und letzte Zeile des Blocks, die geändert wurde / N Zeilennummern anzeigen
Lukas
10

fc. fc kann große Dateien (> 4 GByte) besser verarbeiten als Cygwins Diff.

nerdfever.com
quelle
10

Es gibt auch Powershell (das Teil von Windows ist). Es ist nicht schnell, aber flexibel. Hier ist der grundlegende Befehl. Die Leute haben verschiedene Cmdlets und Skripte dafür geschrieben, wenn Sie eine bessere Formatierung benötigen.

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

Nicht Teil von Windows, aber wenn Sie ein Entwickler mit Visual Studio sind, wird es mit WinDiff (grafisch) geliefert.

Aber mein persönlicher Favorit ist BeyondCompare, das 30 US-Dollar kostet.

Paul Williams
quelle
4

DiffUtils ist wahrscheinlich die beste Wahl . Es ist das Windows-Äquivalent von diff.

Meines Wissens gibt es keine eingebauten Äquivalente.

mattkelly
quelle
Ich habe das auch verwendet, aber heute habe ich festgestellt, dass die ziemlich alte Version 2.8.7, die auf dieser Seite bereitgestellt wird, einen Fehler aufweist (beim Vergleich bestimmter PDF-Dateien werden sie als gleich gemeldet). Also jetzt lieber den "Git Diff", wie von Firelight vorgeschlagen.
Anre
4

Der Grund, warum Sie den Fehler mit COMP erhalten, ist, dass das Dienstprogramm davon ausgeht, dass die zu vergleichenden Dateien dieselbe Größe haben. Um das zu überwinden, können Sie th verwenden'/n' Option verwenden, mit der Sie die Anzahl der Zeilen angeben können, die Sie vergleichen möchten. (Sehen Sie sich die von comp unterstützten Optionen an, indem Sie 'comp /?'in die Befehlszeile eingeben . Ihr Befehl würde also folgendermaßen aussehen:

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

Dies sollte Ihr Problem lösen, wenn Sie bei der Verwendung von COMP bleiben möchten. Dies ist jedoch ein Problem für sehr große Dateien.

Obwohl compist eine Option, aber ich denke, es ist primitiv undFC eine bessere Option. Sie können FORFILESund FCzusammen verwenden, um wahrscheinlich ein wirklich gutes Dienstprogramm für den Dateivergleich zu erstellen, wenn Sie häufig eines benötigen.

FC wird auf diese Weise für ref verwendet:

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

Es gibt viele Optionen, die Sie sehen können, wenn Sie 'fc /?' hoffen, dass dies hilft

Proxace
quelle
2

Ich habe eine leichte grafische Software für Windows gefunden, die mangels diffBefehl nützlich zu sein scheint . Es könnte alle meine Probleme lösen.

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

Ahmad
quelle
0

Ich weiß nicht, ob das folgende Tool genau das ist, was Sie brauchen. Aber ich verwende für bestimmte Dateien gerne ein Online-Tool. Auf diese Weise kann ich es unabhängig vom Betriebssystem verwenden. Hier ist ein Beispiel: diffchecker.com

Aber für meine Bedürfnisse ist GIT das beste Tool, um Änderungen und Protokolle der Dateien meines Projekts zu verfolgen. Wenn Sie in einem Team arbeiten, können Sie ein Repo online auf einem Server von Ihnen haben oder es mit Bitbucket oder Github verwenden.

Hoffe es hilft jemandem.

Pedro Acácio
quelle
0

Wenn Sie git auf Ihrem Computer installiert haben, können Sie ein git-Terminal öffnen und einfach den Linux- diffBefehl wie gewohnt verwenden.

falsePockets
quelle