Что такое Windows-эквивалент команды diff? - PullRequest
258 голосов
/ 29 июля 2011

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

Ответы [ 13 ]

413 голосов
/ 29 июля 2011

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

FC file1 file2

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

FC /B file1 file2
29 голосов
/ 29 июля 2011

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

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

23 голосов
/ 29 июля 2011

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

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

14 голосов
/ 13 июня 2014

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

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

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

12 голосов
/ 01 июня 2015

ФК отлично работает, в моем случае это было бесполезно, так как я хотел просто изменить строки. И ФК дает дополнительные данные, такие как имя файла, те же строки и двустороннее сравнение.

    >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

9 голосов
/ 18 апреля 2014

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

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

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

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

9 голосов
/ 26 сентября 2012

Ь. fc лучше обрабатывает большие файлы (> 4 ГБ), чем diff Cygwin.

4 голосов
/ 29 июля 2011

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

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

2 голосов
/ 27 декабря 2016

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

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

2 голосов
/ 30 января 2015

Причина, по которой вы получаете сообщение об ошибке 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 /?' надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...