Jaki jest odpowiednik polecenia diff w systemie Windows?

284

Wiem, że jest podobny post: tutaj .
Próbowałem użyć comppolecenia, jak wspomniano, ale jeśli mam dwa pliki, jeden z danymi takimi jak „abcd”, a drugi z danymi „abcde”, to po prostu mówi, że pliki mają różne rozmiary. Chciałem wiedzieć, gdzie dokładnie się różnią. W Uniksie prosty diff mówi mi, który wiersz i kolumna, polecenie comp w Windows działa, jeśli mam coś takiego jak „abd” i „abc”. Nie inaczej Jakieś pomysły, które mogę wykorzystać do tego?

wittythotha
źródło

Odpowiedzi:

461

Uruchom to w powłoce CMD lub pliku wsadowym:

FC file1 file2

FC może być również użyty do porównania plików binarnych:

FC /B file1 file2
Andriy M.
źródło
3
Jak to zrobić ze wszystkimi zmienionymi plikami w dwóch folderach? Na przykład porównuję zawartość folderu 1 z zawartością folderu 2: czy pojawiają się jakieś zmienione linie w folderze 2?
Wolfpack'08
17
@ Wolfpack'08 ": FC path1\* FC path2\*porównałby wszystkie pliki w folderach path1i path2pod warunkiem, że mają one identyczne nazwy. Jeśli istnieją pliki o niezgodnych nazwach, FC zgłosi brakujący plik, ale tylko dla plików pierwszego folderu, które nie są znaleźć w drugim folderze, a nie na odwrót. Aby złapać wszystkie niedopasowania, prawdopodobnie potrzebna byłaby inna technika.
Andriy M
@AndriyM Więc nowe pliki spowodowałyby, że FC popełnił błąd bez zwracania żadnych faktycznych linii? Tylko komunikat o błędzie?
Wolfpack'08
1
@ Wolfpack'08: Tak, tylko wiadomość o brakującym odpowiedniku, brak wierszy z istniejącej partii. (Ale to nie zakończyłoby przetwarzania innych, istniejących par plików, a ich porównanie byłoby nadal przeprowadzone, gdybyś o to prosił.)
Andriy M
@AndriyM Chcesz powiedzieć: „Jeśli błąd: files in both directories are diff'd; files in only one directory throw errors.” Interesujące. Ale z pewnością istnieje program innej firmy równoważny do diff?
Wolfpack'08
36

Cóż, w systemie Windows z radością uruchamiam diffi wiele innych narzędzi GNU. Możesz to zrobić z cygwinem , ale ja osobiście wolę GnuWin32, ponieważ jest to znacznie lżejsza instalacja.

Tak więc, moja odpowiedź brzmi: ekwiwalent Windowsa diffjest niczym innym jak diffsobą!

David Heffernan
źródło
1
Podstawowa instalacja Cygwin nie wydaje się zawierać różnic. Jakie dodatkowe pakiety muszę zainstalować, aby je uzyskać?
Warren Dew
7
Nie polecam cygwin. Użyłbym macierzystego portu Win32 dla diff
David Heffernan
1
@WarrenDew Potrzebny jest pakiet Cygwin diffutils. Zobacz cygwin.com/cgi-bin2/…
Steve
24

Winmerge ma narzędzie wiersza poleceń, które warto sprawdzić.

Możesz także użyć jego graficznej części, w zależności od potrzeb.

Robert Greiner
źródło
2
Chociaż nie jest to wbudowane narzędzie systemu Windows, bardzo go polecam - jest to oprogramowanie typu open source, lekkie i według mnie wolne od błędów.
david.barkhuizen
19

Inną alternatywą jest pobranie i zainstalowanie git tutaj . Następnie dodaj ścieżkę Git\bin\do swojej PATHzmiennej. To da ci nie tylko różnicę, ale także wiele innych poleceń linux, których możesz używać z wiersza poleceń systemu Windows.

Możesz ustawić PATHzmienną, klikając prawym przyciskiem myszy Komputer i wybierając Właściwości. Następnie możesz kliknąć Zaawansowane ustawienia systemu po lewej stronie ekranu. W wyskakującym okienku kliknij Zmienne środowiskowe, a następnie dodaj lub zaktualizuj zmienną PATH w zmiennych użytkownika za pomocąGit\bin\

Dokumentacja Git diff

Tim Hutchison
źródło
@firelight - dziękuję za odpowiedź. Czy możesz wyjaśnić, co masz na myśli: „Następnie dodaj ścieżkę do Git \ bin \ do zmiennej PATH”.
BKSpurgeon
2
@BKSpurgeon - Jeśli klikniesz prawym przyciskiem myszy Komputer i wybierzesz Właściwości, możesz kliknąć Zaawansowane ustawienia systemu po lewej stronie ekranu. W wyskakującym okienku kliknij Zmienne środowiskowe, a następnie dodaj lub zaktualizuj zmienną PATH w zmiennych użytkownika za pomocą Git \ bin \
Tim Hutchison
@JustinCormack Czy masz na to jakieś referencje? Właśnie próbowałem diff w Git Bash i zadziałało
Tim Hutchison
3
@Tim Hutchison, z twojej odpowiedzi: „To da ci nie tylko różnicę, ale także wiele innych poleceń Linuksa, których możesz używać z wiersza poleceń systemu Windows”. - które masz na myśli? Kiedy ktoś instaluje Git, powinien mieć git...dostępne pliki wykonywalne z PATH. Co więcej, odpowiedź powinna prawdopodobnie zawierać jedną ważną informację: że musisz uruchomić narzędzie do różnicowania pisząc git diff, a nie tylko diff.
Petr Bodnár,
koleś, to zupełnie inna diff
sprawa
14

FC działa świetnie, w moim przypadku nie było to pomocne, ponieważ chciałem tylko zmienić linie. I FC podaje dodatkowe dane, takie jak nazwa pliku, te same linie i porównanie dwustronne.

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

ale w moim przypadku chciałem tylko te linie, które się zmieniły i chciałem, aby te linie zostały wyeksportowane do innego pliku, bez żadnych innych nagłówków ani danych.

Użyłem więc „findstr” do porównania pliku:

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

gdzie :

data.txt.bak to nazwa starego pliku

data.txt to nazwa nowego pliku

DiffResult.txt zawiera zmienione dane, tj. tylko jedną linię #### 09

Nimish Choudhary
źródło
1
/ Tylko pierwszy wiersz i ostatni wiersz bloku, który został zmieniony / N pokazuje numery wierszy
Lukas
10

fc. fc jest lepszy w obsłudze dużych plików (> 4 GB) niż diff Cygwina.

nerdfever.com
źródło
10

Istnieje również Powershell (który jest częścią systemu Windows). To nie jest szybkie, ale elastyczne, oto podstawowe polecenie. Ludzie napisali dla niego różne polecenia cmdlet i skrypty, jeśli potrzebujesz lepszego formatowania.

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

Nie jest częścią systemu Windows, ale jeśli jesteś programistą w Visual Studio, jest on wyposażony w WinDiff (graficzny)

Ale moim osobistym faworytem jest BeyondCompare, który kosztuje 30 USD.

Paul Williams
źródło
4

DiffUtils jest prawdopodobnie najlepszym wyborem . Jest to Windows diff.

Według mojej wiedzy nie ma wbudowanych odpowiedników.

mattkelly
źródło
Z tego też skorzystałem, ale dzisiaj odkryłem, że dość stara wersja 2.8.7, która znajduje się na tej stronie, ma błąd (przy porównywaniu niektórych plików PDF są one zgłaszane jako równe). Więc teraz wolę „git diff”, jak sugeruje firelight.
anre
4

Przyczyną tego błędu jest to, że narzędzie zakłada, że ​​porównywane pliki mają ten sam rozmiar. Aby temu zaradzić, możesz skorzystać '/n'z opcji, z którą możesz określić liczbę linii, które chcesz porównać. (zobacz opcje obsługiwane przez komp, wpisując 'comp /?'w wierszu poleceń. aby twoje polecenie wyglądało następująco:

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

To powinno rozwiązać twój problem, jeśli chcesz trzymać się COMP. Będzie to jednak problem w przypadku naprawdę dużych plików.

Chociaż compjest to opcja, ale uważam, że jest prymitywna i FCjest lepszą opcją. możesz użyć FORFILESi FCrazem, aby prawdopodobnie zrobić naprawdę dobre narzędzie do porównywania plików, jeśli potrzebujesz go często.

FC używa się w ten sposób do oznaczenia:

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

istnieje wiele dostępnych opcji, które można zobaczyć, 'fc /?' mając nadzieję, że to pomoże

bliżej
źródło
2

Znalazłem lekkie oprogramowanie graficzne dla systemu Windows, które wydaje się przydatne przy braku diffpolecenia. To może rozwiązać wszystkie moje problemy.

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

Ahmad
źródło
0

Nie wiem, czy poniższe narzędzie jest dokładnie tym, czego potrzebujesz. Ale lubię używać, dla określonych plików, jakiegoś narzędzia online. W ten sposób mogę go używać niezależnie od systemu operacyjnego. Oto przykład: diffchecker.com

Ale według moich potrzeb najlepszym narzędziem do śledzenia zmian i dzienników plików mojego projektu jest GIT. Jeśli pracujesz w zespole, możesz mieć repozytorium online na swoim serwerze lub użyć go z Bitbucket lub Github.

Mam nadzieję, że to komuś pomoże.

Pedro Acácio
źródło
0

Jeśli zainstalowałeś git na swoim komputerze, możesz otworzyć terminal git i po prostu użyć diffpolecenia Linux jak zwykle.

falsePockets
źródło