Що таке Windows еквівалент команди diff?


284

Я знаю, що є посада, схожа на цю: тут .
Я спробував скористатися такою compкомандою, як вона згадувала, але якщо у мене є два файли, один з такими даними, як "abcd", а другий з даними "abcde", він просто говорить, що файли мають різний розмір. Я хотів знати, де саме вони відрізняються. У Unix простий diff розказує мені, у якому рядку та стовпці працює команда comp у Windows, якщо у мене є щось на кшталт "abd" та "abc". Не інакше. Будь-які ідеї, що я можу використовувати для цього?

Відповіді:


461

Запустіть це в оболонці або пакетному файлі CMD:

FC file1 file2

FC також можна використовувати для порівняння двійкових файлів:

FC /B file1 file2

3
Як це зробити з усіма зміненими файлами у двох папках? Мовляв, я порівнюю вміст папки1 зі змістом папки2: відображаються будь-які змінені рядки в папці2?
Wolfpack'08

17
@ Wolfpack'08 ": FC path1\* FC path2\*порівняв би всі файли у папках path1і за path2умови, що вони (файли) мають однакові імена. Якщо є файли з невідповідними іменами, FC повідомить про відсутні файл, але лише для файлів першої папки, які не є "Ви не знайдете у другій папці, а не навпаки. Щоб знайти всі невідповідності, ймовірно, знадобиться інша техніка.
Андрій М

@AndriyM Отже, нові файли можуть призвести до помилок FC, не повертаючи реальних рядків? Лише повідомлення про помилку?
Wolfpack'08

1
@ Wolfpack'08: Так, лише повідомлення про зниклого партнера, жодних рядків від існуючої партії. (Але це не закінчило б обробку інших, існуючих пар файлів і їх порівняння все одно буде здійснюватися, якби це ви запитували.)
Андрій М

@AndriyM Отже, ви хочете сказати: "Якщо помилка: files in both directories are diff'd; files in only one directory throw errors." Цікаво. Але напевно є стороння програма, еквівалентна різниці?
Wolfpack'08

36

Що ж, у Windows я із задоволенням запускаю diffі багато інших інструментів GNU. Ви можете це зробити з cygwin , але я особисто віддаю перевагу GnuWin32, оскільки це набагато легший досвід установки.

Отже, моя відповідь полягає в тому, що еквівалент Windows - diffце не хто інший, як diffсама!


1
Базова установка Cygwin не містить різниці. Які додаткові пакети мені потрібно встановити, щоб отримати його?
Warren Dew

7
Не рекомендую cygwin. Я б використовував рідний порт Win32 різниць
Девід Хеффернан

1
@WarrenDew Вам потрібен пакет Cygwin diffutils. Дивіться cygwin.com/cgi-bin2/…
Стів

24

Winmerge має утиліту командного рядка, яку, можливо, варто перевірити.

Крім того, ви можете також використовувати його графічну частину залежно від того, що вам потрібно.


2
Хоча це не вбудована утиліта Windows, я настійно рекомендую її - вона є відкритим кодом, невелика вага та, на мій досвід, відсутня помилка.
david.barkhuizen

19

Ще одна альтернатива - завантажити та встановити git звідси . Потім, додайте шлях до Git\bin\вашого PATHзмінної. Це дасть вам не лише відмінності, але й безліч інших команд Linux, якими ви можете скористатися з командного рядка Windows.

Ви можете встановити PATHзмінну, клацнувши правою кнопкою миші на "Комп'ютер" та вибравши "Властивості". Потім ви можете натиснути на Додаткові параметри системи в лівій частині екрана. У спливаючому вікні натисніть "Змінні середовища", а потім додайте або оновіть змінну PATH у своїх змінних користувачаGit\bin\

Документація Git diff


@firelight - дякую за вашу відповідь. Чи можете ви пояснити, що ви тут маєте на увазі: "Потім додайте шлях до Git \ bin \ до змінної PATH."
BKSpurgeon

2
@BKSpurgeon - Якщо ви клацніть правою кнопкою миші на "Комп'ютер" і виберіть "Властивості", ви можете натиснути на "Додаткові параметри системи" в лівій частині екрана. У спливаючому вікні клацніть Змінні середовища, а потім або додайте або оновіть змінну PATH у своїх змінних користувача за допомогою Git \ bin \
Тім Хатчісон,

@JustinCormack У вас є посилання на це? Я щойно спробував різницю в Git Bash, і це спрацювало
Тім Хатчісон

3
@Tim Hutchison, з вашої відповіді: "Це дасть вам не тільки розбіжність, але і багато інших команд Linux, якими ви можете скористатися з командного рядка Windows." - які ви маєте на увазі? Коли хтось встановлює Git, у нього / вона повинні бути просто git...доступні виконувані файли з PATH. Більше того, відповідь, ймовірно, повинна містити одну важливу інформацію: про те, що вам потрібно запустити інструмент diff, написавши git diff, а не просто diff.
Петр Боднар

чувак, це зовсім іншеdiff
vintproykt

14

ФК працює чудово тим, що в моєму випадку це було не корисно, оскільки я хотів лише змінити лінії. А FC надають додаткові дані, такі як ім'я файлу, однакові рядки та двостороннє порівняння.

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

але в моєму випадку я хотів, щоб лише ті рядки, які були змінені, хотіли, щоб ці рядки були експортовані в інший файл, без будь-якого іншого заголовка чи даних.

Тому я використав "findstr" для порівняння файлу:

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

де:

data.txt.bak це ім'я старого файлу

data.txt - це ім'я нового файлу

DiffResult.txt містить дані, які змінюються, тобто лише один рядок #### 09


1
/ Лише перший рядок і останній рядок блоку, який змінено / N показують номери рядків
Лукас


10

Також є Powershell (який є частиною Windows). Це не швидко, але гнучко, ось основна команда. Люди написали для нього різні командлети та сценарії, якщо вам потрібно краще форматування.

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

Не є частиною Windows, але якщо ви розробник Visual Studio, він постачається з WinDiff (графічний)

Але мій особистий фаворит - BeyondCompare, який коштує 30 доларів.


4

DiffUtils - це, мабуть, найкраща ставка. Це еквівалент Windows для розл.

Наскільки мені відомо, немає вбудованих еквівалентів.


Я також використав це, проте сьогодні я виявив, що у досить старої версії 2.8.7, яка надається на цій сторінці, є помилка (при порівнянні певних файлів PDF вони повідомляються як рівні). Тому зараз віддайте перевагу "git diff", як це запропонував firelight.
анре

4

Причина отримання помилки з COMP полягає в тому, що утиліта передбачає, що файли, які ви порівнюєте, мають однаковий розмір. Щоб подолати це, ви можете скористатися '/n'опцією, з якою ви можете вказати кількість рядків, які потрібно порівняти. (див. параметри, які підтримує comp, ввівши 'comp /?'в командному рядку. щоб ваша команда виглядала так:

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

Це має вирішити вашу проблему, якщо ви хочете дотримуватися використання COMP. Але це буде проблемою для дійсно великих файлів.

Хоча compце варіант, але я вважаю, що це примітивний і FCкращий варіант. Ви можете використовувати FORFILESі FCразом , щоб , можливо , зробити дійсно хорошу утиліту filecompare , якщо вам потрібно один на регулярній основі.

ФК використовується таким чином для посилання:

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

Є багато варіантів, які ви можете побачити, 'fc /?' сподіваючись, це допоможе



0

Вікном, еквівалентним команді diff, є команда fc (File Comapre).

Ось основні кроки для цього:
1. Зберігайте два файли у папці (Приклад file1.html та file2.html)
2.
Командна строка запуску 3. Введіть fc file1Location file2Location

Знайшли детальний підручник з того самого:

http://www.howtogeek.com/206123/how-to-use-fc-file-compare-from-the-windows-command-prompt/


0

Я не знаю, чи є наступним інструментом саме те, що вам потрібно. Але я люблю використовувати для певних файлів якийсь онлайн-інструмент. Таким чином я можу використовувати його незалежно від операційної системи. Ось приклад: diffchecker.com

Але для моїх потреб я вважаю, що найкращим інструментом для відстеження змін та журналів файлів мого проекту є GIT. Якщо ви працюєте в команді, ви можете мати репо в Інтернеті на вашому сервері або використовувати його з Bitbucket або Github.

Сподіваюся, це комусь допоможе.


0

Якщо ви встановили git на своїй машині, ви можете відкрити термін git і просто використовувати команду Linux diffяк звичайну.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.