Apa yang setara dengan Windows dari perintah diff?

284

Saya tahu ada posting yang mirip dengan ini: di sini .
Saya mencoba menggunakan compperintah seperti yang disebutkan, tetapi jika saya memiliki dua file, satu dengan data seperti "abcd" dan yang lainnya dengan data "abcde", ia hanya mengatakan file-file tersebut memiliki ukuran yang berbeda. Saya ingin tahu di mana tepatnya mereka berbeda. Di Unix, diff sederhana memberi tahu saya baris dan kolom mana, perintah comp di windows berfungsi jika saya memiliki sesuatu seperti "abd" dan "abc". Tidak sebaliknya. Adakah ide yang bisa saya gunakan untuk ini?

wittythotha
sumber

Jawaban:

461

Jalankan ini di file CMD shell atau batch:

FC file1 file2

FC juga dapat digunakan untuk membandingkan file biner:

FC /B file1 file2
Andriy M
sumber
3
Bagaimana Anda melakukan ini dengan semua file yang diubah dalam dua folder? Seperti, saya membandingkan konten folder1 dengan konten folder2: setiap baris yang berubah di folder2 muncul?
Wolfpack'08
17
@ Wolfpack'08 ": FC path1\* FC path2\*akan membandingkan semua file dalam folder path1dan path2, asalkan mereka (file) memiliki nama yang identik. Jika ada file dengan nama yang tidak cocok, FC akan melaporkan file yang hilang, tetapi hanya untuk file folder pertama yang muncul dapat ditemukan di folder kedua dan bukan sebaliknya. Untuk menangkap semua ketidakcocokan, teknik yang berbeda mungkin akan diperlukan
Andriy M
@AndriyM Jadi, file baru akan menyebabkan kesalahan FC tanpa mengembalikan baris yang sebenarnya? Hanya pesan kesalahan?
Wolfpack'08
1
@ Wolfpack'08: Ya, hanya pesan tentang mitra yang hilang, tidak ada baris dari pihak yang ada. (Tetapi itu tidak akan menghentikan pemrosesan pasangan file lain, yang ada, dan perbandingannya masih akan dilakukan, jika itu yang Anda tanyakan.)
Andriy M
@AndriyM Jadi, Anda bermaksud mengatakan: "Jika kesalahan: files in both directories are diff'd; files in only one directory throw errors." Menarik. Tapi tentunya ada program pihak ke-3 yang setara dengan diff?
Wolfpack'08
36

Nah, di Windows saya dengan senang hati menjalankan diffdan banyak alat GNU lainnya. Anda dapat melakukannya dengan cygwin , tetapi saya pribadi lebih suka GnuWin32 karena ini adalah pengalaman instalasi yang jauh lebih ringan.

Jadi, jawaban saya adalah setara dengan Windows diff, tidak lain adalah diffdirinya sendiri!

David Heffernan
sumber
1
Instalasi dasar Cygwin tampaknya tidak menyertakan diff. Paket tambahan apa yang perlu saya instal untuk mendapatkannya?
Warren Dew
7
Saya tidak merekomendasikan cygwin. Saya akan menggunakan port asli Win32 dari diff
David Heffernan
1
@ WarrenDew Paket Cygwin yang Anda butuhkan adalah diffutils. Lihat cygwin.com/cgi-bin2/...
Steve Pitchers
24

Winmerge memiliki utilitas baris perintah yang mungkin perlu dicoba.

Juga, Anda dapat menggunakan bagian grafis juga tergantung pada apa yang Anda butuhkan.

Robert Greiner
sumber
2
Meskipun ini bukan utilitas Windows bawaan, saya sangat merekomendasikannya - ini open-source, ringan, dan dalam pengalaman saya bebas bug.
david.barkhuizen
19

Alternatif lain adalah mengunduh dan menginstal git dari sini . Kemudian, tambahkan path ke variabel Git\bin\Anda PATH. Ini akan memberi Anda tidak hanya diff, tetapi juga banyak perintah linux lain yang dapat Anda gunakan dari baris perintah windows.

Anda dapat mengatur PATHvariabel dengan mengklik kanan pada Komputer dan memilih Properti. Kemudian Anda dapat mengklik Pengaturan Sistem Tingkat Lanjut di sisi kiri layar. Dalam pop up, klik Variabel Lingkungan lalu tambahkan atau perbarui variabel PATH dalam variabel pengguna AndaGit\bin\

Dokumentasi beda git

Tim Hutchison
sumber
@firelight - terima kasih atas jawaban Anda. Bisakah Anda menguraikan apa yang Anda maksud di sini: "Lalu, tambahkan path ke Git \ bin \ ke variabel PATH Anda."
BKSpurgeon
2
@ BKSpurgeon - Jika Anda mengklik kanan pada Komputer dan memilih Properti maka Anda dapat mengklik Pengaturan Sistem Tingkat Lanjut di sisi kiri layar. Dalam pop up, klik Variabel Lingkungan lalu tambahkan atau perbarui variabel PATH dalam variabel pengguna Anda dengan Git \ bin \
Tim Hutchison
@JustinCormack Apakah Anda punya referensi untuk ini? Saya baru saja mencoba beda di Git Bash dan berhasil
Tim Hutchison
3
@Tim Hutchison, dari jawaban Anda: "Ini akan memberi Anda tidak hanya diff, tetapi juga banyak perintah linux lain yang dapat Anda gunakan dari baris perintah windows." - yang mana maksudmu Ketika seseorang menginstal Git, ia seharusnya memiliki git...file executable yang tersedia dari PATH. Selain itu, jawabannya mungkin harus mencakup satu informasi penting: bahwa Anda perlu meluncurkan alat diff dengan menulis git diff, bukan hanya diff.
Petr Bodnár
Bung, itu sama sekali laindiff
vintproykt
14

FC bekerja dengan baik dalam kasus saya itu tidak membantu karena saya hanya ingin baris yang diubah. Dan FC memberikan data tambahan seperti nama file, baris yang sama dan perbandingan bilateral.

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

tetapi dalam kasus saya, saya hanya menginginkan baris yang telah berubah dan ingin baris tersebut diekspor ke file yang berbeda, tanpa header atau data lain.

Jadi saya menggunakan "findstr" untuk membandingkan file:

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

dimana:

data.txt.bak adalah nama file lama

data.txt adalah nama file baru

DiffResult.txt berisi data yang diubah yaitu hanya satu baris #### 09

Nimish Choudhary
sumber
1
/ Satu- satunya baris pertama dan baris terakhir dari blok yang diubah / N menunjukkan nomor baris
Lukas
10

fc. fc lebih baik dalam menangani file besar (> 4 GBytes) daripada diff Cygwin.

nerdfever.com
sumber
10

Ada juga Powershell (yang merupakan bagian dari Windows). Ini tidak cepat tetapi fleksibel, inilah perintah dasarnya. Orang-orang telah menulis berbagai cmdlet dan skrip untuk itu jika Anda perlu memformat lebih baik.

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

Bukan bagian dari Windows, tetapi jika Anda adalah seorang pengembang dengan Visual Studio, ia datang dengan WinDiff (grafis)

Tapi favorit pribadi saya adalah BeyondCompare, yang harganya $ 30.

Paul Williams
sumber
4

DiffUtils mungkin merupakan taruhan terbaik Anda. Ini setara dengan Windows untuk diff.

Setahu saya tidak ada built-in setara.

mattkelly
sumber
Saya menggunakan itu juga, bagaimanapun, hari ini saya menemukan bahwa versi 2.8.7 yang cukup lama yang disediakan pada halaman itu memiliki bug (ketika membandingkan file PDF tertentu mereka dilaporkan sama). Jadi sekarang lebih suka "git diff" seperti yang disarankan oleh firelight.
sekitar
4

Alasan Anda mendapatkan kesalahan dengan COMP adalah bahwa utilitas menganggap file yang Anda bandingkan berukuran sama. Untuk mengatasinya Anda dapat menggunakan '/n'opsi th yang Anda dapat menentukan jumlah baris yang ingin Anda bandingkan. (lihat opsi yang didukung oleh comp dengan mengetik 'comp /?'pada baris perintah. sehingga perintah Anda akan terlihat seperti:

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

Ini akan menyelesaikan masalah Anda jika Anda ingin tetap menggunakan COMP. Tapi ini akan menjadi masalah untuk file yang sangat besar.

Padahal compitu pilihan, tapi saya rasa itu primitif dan FCpilihan yang lebih baik. Anda dapat menggunakan FORFILESdan FCbersama - sama untuk membuat utilitas filecompare yang benar-benar bagus jika Anda membutuhkannya secara rutin.

FC digunakan seperti ini untuk ref:

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

ada banyak opsi yang tersedia yang dapat Anda lihat dengan 'fc /?' harapan ini bisa membantu

prekursor
sumber
2

Saya telah menemukan perangkat lunak grafis ringan untuk windows yang tampaknya berguna karena kurangnya diffperintah. Itu bisa menyelesaikan semua masalah saya.

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

Ahmad
sumber
0

Saya tidak tahu apakah alat berikut ini adalah yang Anda butuhkan. Tapi saya suka menggunakan, untuk file tertentu, beberapa alat online. Dengan cara ini saya dapat menggunakannya terlepas dari sistem operasional. Berikut ini contohnya: diffchecker.com

Tetapi untuk kebutuhan saya, saya kira alat terbaik untuk melacak perubahan dan log dari file proyek saya adalah GIT. Jika Anda bekerja dalam tim, Anda dapat memiliki beberapa repo online di server Anda, atau menggunakannya dengan Bitbucket atau Github.

Semoga ini bisa membantu seseorang.

Pedro Acácio
sumber
0

Jika Anda telah menginstal git pada mesin Anda, Anda dapat membuka terminal git dan cukup menggunakan diffperintah Linux seperti biasa.

falsePockets
sumber