Что такое Windows-эквивалент команды diff?


284

Я знаю, что есть пост, похожий на этот: здесь .
Я попытался использовать compкоманду, как она упоминала, но если у меня есть два файла, один с данными типа «abcd», а другой с данными «abcde», он просто говорит, что файлы имеют разные размеры. Я хотел знать, где именно они отличаются. В Unix простой diff говорит мне, какую строку и столбец команда comp в windows работает, если у меня есть что-то вроде «abd» и «abc». Не иначе. Есть идеи, что я могу использовать для этого?

Ответы:


461

Запустите это в оболочке CMD или командном файле:

FC file1 file2

FC также может использоваться для сравнения двоичных файлов:

FC /B file1 file2

3
Как вы делаете это со всеми измененными файлами в двух папках? Например, я сравниваю содержимое folder1 с содержимым folder2: какие-либо измененные строки в folder2 отображаются?
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.» Интересно. Но наверняка есть сторонняя программа, эквивалентная diff?
Wolfpack'08

36

Ну, на Windows я с удовольствием запускаю diffи многие другие инструменты GNU. Вы можете сделать это с Cygwin , но я лично предпочитаю GnuWin32 потому что это намного легче в установке.

Итак, мой ответ таков: эквивалент Windows diff- это не что иное, как он diffсам!


1
Базовая установка Cygwin, похоже, не включает diff. Какие дополнительные пакеты мне нужно установить, чтобы получить его?
Уоррен Дью

7
Я не рекомендую Cygwin. Я бы использовал собственный дифференциал Win32
Дэвид Хеффернан,

1
@WarrenDew Пакет Cygwin, который вам нужен diffutils. См. Cygwin.com/cgi-bin2/…
Стив

24

У Winmerge есть утилита командной строки, которую стоит проверить.

Кроме того, вы также можете использовать графическую часть в зависимости от того, что вам нужно.


2
Хотя это не встроенная утилита Windows, я настоятельно рекомендую ее - она ​​с открытым исходным кодом, легкая и по моему опыту не содержит ошибок.
david.barkhuizen

19

Другой вариант - скачать и установить git отсюда . Затем добавьте путь Git\bin\к вашей PATHпеременной. Это даст вам не только diff, но и множество других команд linux, которые вы можете использовать из командной строки Windows.

Вы можете установить PATHпеременную, щелкнув правой кнопкой мыши Компьютер и выбрав Свойства. Затем вы можете нажать на Дополнительные параметры системы в левой части экрана. Во всплывающем окне выберите «Переменные среды», а затем добавьте или измените переменную PATH в пользовательских переменных с помощьюGit\bin\

Git diff документация


@firelight - спасибо за ваш ответ. Можете ли вы уточнить, что вы имеете в виду здесь: «Затем добавьте путь к Git \ bin \ к вашей переменной PATH».
BKSpurgeon

2
@BKSpurgeon - если вы щелкнете правой кнопкой мыши по компьютеру и выберете «Свойства», вы можете нажать на «Дополнительные параметры системы» в левой части экрана. Во всплывающем окне щелкните «Переменные среды», а затем добавьте или обновите переменную PATH в пользовательских переменных с помощью команды Git \ bin \
Tim Hutchison

@JustinCormack У вас есть ссылки на это? Я только что попробовал diff в Git Bash, и это сработало
Тим Хатчисон

3
@ Тим Хатчисон, из вашего ответа: «Это даст вам не только diff, но и много других команд linux, которые вы можете использовать из командной строки Windows». - какие вы имеете в виду? Когда кто-то устанавливает Git, он / она должен иметь только git...доступные исполняемые файлы из PATH. Более того, ответ, вероятно, должен включать одну важную информацию: вам нужно запустить инструмент diff, написав git diff, а не просто diff.
Петр Боднар

чувак, это совсем другоеdiff
винтпроект

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 показывают номера строк
Lukas


10

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

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

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

Но мой личный фаворит - BeyondCompare, который стоит 30 долларов.


4

DiffUtils , вероятно, ваш лучший выбор . Это Windows-эквивалент diff.

Насколько мне известно, нет встроенных эквивалентов.


Я также использовал это, однако сегодня я обнаружил, что довольно старая версия 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вместе, чтобы, вероятно, сделать действительно хорошую утилиту сравнения файлов, если она вам нужна часто.

ФК используется таким образом для ссылки:

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

Есть много вариантов, которые вы можете увидеть, 'fc /?' надеюсь, это поможет


2

Я нашел легкое графическое программное обеспечение для окон, которое кажется полезным при отсутствии diffкоманд. Это может решить все мои проблемы.

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


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.