Windows tương đương với lệnh diff là gì?


284

Tôi biết rằng có một bài tương tự như thế này: ở đây .
Tôi đã thử sử dụng complệnh như nó đã đề cập, nhưng nếu tôi có hai tệp, một tệp có dữ liệu như "abcd" và tệp kia có dữ liệu "abcde", nó chỉ nói các tệp có kích cỡ khác nhau. Tôi muốn biết chính xác họ khác nhau ở đâu. Trong Unix, diff đơn giản cho tôi biết hàng và cột nào, lệnh comp trong windows hoạt động nếu tôi có một cái gì đó như "abd" và "abc". Không khác. Bất kỳ ý tưởng những gì tôi có thể sử dụng cho việc này?

Câu trả lời:


461

Chạy tệp này trong shell shell hoặc tệp bó:

FC file1 file2

FC cũng có thể được sử dụng để so sánh các tệp nhị phân:

FC /B file1 file2

3
Làm thế nào để bạn làm điều này với tất cả các tập tin thay đổi trong hai thư mục? Giống như, tôi so sánh nội dung của thư mục1 với nội dung của thư mục2: có dòng nào thay đổi trong thư mục 2 không?
Wolfpack'08

17
@ Wolfpack'08 ": FC path1\* FC path2\*sẽ so sánh tất cả các tệp trong các thư mục path1path2, miễn là chúng (các tệp) có tên giống nhau. Nếu có các tệp có tên không khớp, FC sẽ báo cáo một tệp bị thiếu, nhưng chỉ đối với các tệp của thư mục đầu tiên phát sinh Không tìm thấy trong thư mục thứ hai chứ không phải ngược lại. Để bắt được tất cả các điểm không phù hợp, có thể cần một kỹ thuật khác.
Andriy M

@AndriyM Vì vậy, các tệp mới sẽ khiến FC bị lỗi mà không trả lại bất kỳ dòng thực tế nào? Chỉ có thông báo lỗi?
Wolfpack'08

1
@ Wolfpack'08: Có, chỉ là thông báo về đối tác bị thiếu, không có dòng nào từ bên hiện có. (Nhưng điều đó sẽ không chấm dứt việc xử lý các cặp tệp khác, hiện có và so sánh của chúng vẫn sẽ được thực hiện, nếu đó là những gì bạn đang hỏi.)
Andriy M

@AndriyM Vì vậy, bạn muốn nói: "Nếu lỗi: files in both directories are diff'd; files in only one directory throw errors." Thú vị. Nhưng chắc chắn có một chương trình của bên thứ 3 tương đương với diff?
Wolfpack'08

36

Chà, trên Windows tôi vui vẻ chạy diffvà nhiều công cụ GNU khác. Bạn có thể làm điều đó với cygwin , nhưng cá nhân tôi thích GnuWin32 hơn vì đây là trải nghiệm cài đặt nhẹ hơn nhiều.

Vì vậy, câu trả lời của tôi là Windows tương đương diff, không ai khác diffchính là nó!


1
Cài đặt cơ sở của Cygwin dường như không bao gồm diff. Tôi cần cài đặt thêm gói nào để có được nó?
Warren Dew

7
Tôi không khuyên dùng Cygwin. Tôi sẽ sử dụng cổng Win32 gốc của diff
David Heffernan

1
@WarrenDew Gói Cygwin bạn cần là diffutils. Xem cygwin.com/cgi-bin2/ trên
Steve Pitchers

24

Winmerge có một tiện ích dòng lệnh có thể đáng để kiểm tra.

Ngoài ra, bạn cũng có thể sử dụng phần đồ họa của nó tùy thuộc vào những gì bạn cần.


2
Mặc dù đây không phải là một tiện ích Windows tích hợp, nhưng tôi đánh giá cao nó - nó là nguồn mở, trọng lượng nhẹ và theo kinh nghiệm của tôi không có lỗi.
david.barkhuizen

19

Một cách khác là tải xuống và cài đặt git từ đây . Sau đó, thêm đường dẫn đến biến Git\bin\của bạn PATH. Điều này sẽ cung cấp cho bạn không chỉ diff, mà còn nhiều lệnh linux khác mà bạn có thể sử dụng từ dòng lệnh windows.

Bạn có thể đặt PATHbiến bằng cách nhấp chuột phải vào Máy tính và chọn Thuộc tính. Sau đó, bạn có thể nhấp vào Cài đặt hệ thống nâng cao ở bên trái màn hình. Trong cửa sổ bật lên, nhấp vào Biến môi trường và sau đó thêm hoặc cập nhật biến PATH trong các biến người dùng của bạn vớiGit\bin\

Tài liệu Git diff


@firelight - cảm ơn bạn đã trả lời. Bạn có thể giải thích những gì bạn muốn nói ở đây không: "Sau đó, hãy thêm đường dẫn đến Git \ bin \ vào biến PATH của bạn."
BKSpurgeon

2
@BKSpurgeon - Nếu bạn nhấp chuột phải vào Máy tính và chọn Thuộc tính thì bạn có thể nhấp vào Cài đặt hệ thống nâng cao ở bên trái màn hình. Trong cửa sổ bật lên, nhấp vào Biến môi trường và sau đó thêm hoặc cập nhật biến PATH trong các biến người dùng của bạn bằng Git \ bin \
Tim Hutchison

@JustinCormack Bạn có tài liệu tham khảo nào cho việc này không? Tôi mới thử diff ở Git Bash và nó đã hoạt động
Tim Hutchison

3
@Tim Hutchison, từ câu trả lời của bạn: "Điều này sẽ cung cấp cho bạn không chỉ khác, mà còn nhiều lệnh linux khác mà bạn có thể sử dụng từ dòng lệnh windows." - ý bạn là gì? Khi một người cài đặt Git, anh ấy / cô ấy nên có git...sẵn các tệp thực thi có sẵn từ PATH. Hơn nữa, câu trả lời có lẽ nên bao gồm một thông tin quan trọng: bạn cần khởi chạy công cụ diff bằng cách viết git diffchứ không chỉ diff.
Petr Bodnár

anh bạn, đó hoàn toàn là một thứ khácdiff
vintproykt

14

FC hoạt động rất tốt bởi trong trường hợp của tôi, nó không hữu ích vì tôi chỉ muốn các dòng được thay đổi. Và FC cung cấp dữ liệu bổ sung như tên tệp, cùng dòng và so sánh song phương.

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

nhưng trong trường hợp của tôi, tôi chỉ muốn các dòng đã thay đổi và muốn các dòng đó được xuất sang tệp khác mà không có bất kỳ tiêu đề hoặc dữ liệu nào khác.

Vì vậy, tôi đã sử dụng "findstr" để so sánh các tập tin:

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

Ở đâu :

data.txt.bak là tên của tập tin cũ

data.txt là tên của tập tin mới

DiffResult.txt chứa dữ liệu được thay đổi, tức là chỉ một dòng #### 09


1
/ Một dòng đầu tiên và dòng cuối cùng của khối được thay đổi / N hiển thị số dòng
Lukas

10

fc. fc xử lý các tệp lớn (> 4 GB) tốt hơn so với diff của Cygwin.


10

Ngoài ra còn có Powershell (là một phần của Windows). Nó không nhanh nhưng linh hoạt, đây là lệnh cơ bản. Mọi người đã viết các lệnh ghép ngắn và tập lệnh khác nhau cho nó nếu bạn cần định dạng tốt hơn.

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

Không phải là một phần của Windows, nhưng nếu bạn là nhà phát triển với Visual Studio, nó đi kèm với WinDiff (đồ họa)

Nhưng sở thích cá nhân của tôi là BeyondCompare, có giá $ 30.


4

DiffUtils có lẽ là đặt cược tốt nhất của bạn. Đó là Windows tương đương với diff.

Theo hiểu biết của tôi không có tương đương tích hợp.


Tôi cũng đã sử dụng nó, tuy nhiên, hôm nay tôi phát hiện ra rằng phiên bản 2.8.7 khá cũ được cung cấp trên trang đó có một lỗi (khi so sánh các tệp PDF nhất định, chúng được báo cáo là bằng nhau). Vì vậy, bây giờ thích "git diff" như được đề xuất bởi ánh sáng.
anre

4

Lý do bạn gặp lỗi với COMP là tiện ích giả định các tệp mà bạn đang so sánh có cùng kích thước. Để khắc phục điều đó, bạn có thể sử dụng '/n'tùy chọn thứ mà bạn có thể chỉ định số lượng dòng bạn muốn so sánh. (xem các tùy chọn được hỗ trợ bởi comp bằng cách gõ 'comp /?'vào dòng lệnh. Vì vậy, lệnh của bạn sẽ như sau:

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

Điều này sẽ giải quyết vấn đề của bạn nếu bạn muốn sử dụng COMP. Nhưng đây sẽ là một vấn đề cho các tập tin thực sự lớn.

Mặc dù complà một lựa chọn, nhưng tôi cảm thấy nó là nguyên thủy và FClà một lựa chọn tốt hơn. bạn có thể sử dụng FORFILESFCcùng nhau để tạo ra một tiện ích quay phim thực sự tốt nếu bạn yêu cầu thường xuyên.

FC được sử dụng theo cách này cho ref:

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

có rất nhiều lựa chọn có sẵn mà bạn có thể thấy với 'fc /?' hy vọng điều này sẽ giúp




0

Tôi không biết nếu công cụ sau đây là những gì bạn cần. Nhưng tôi thích sử dụng, cho các tập tin cụ thể, một số công cụ trực tuyến. Bằng cách này tôi có thể sử dụng nó bất kể hệ thống hoạt động. Đây là một ví dụ: diffchecker.com

Nhưng đối với nhu cầu của tôi, tôi đoán công cụ tốt nhất để theo dõi các thay đổi và nhật ký của các tệp trong dự án của tôi là GIT. Nếu bạn làm việc trong một nhóm, bạn có thể có một số repo trực tuyến trong máy chủ của bạn hoặc sử dụng nó với Bitbucket hoặc Github.

Hy vọng nó sẽ giúp được ai đó.


0

Nếu bạn đã cài đặt git trên máy của mình, bạn có thể mở một thiết bị đầu cuối git và chỉ cần sử dụng difflệnh Linux như bình thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.