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

284

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

wittythotha
источник

Ответы:

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

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

nerdfever.com
источник
10

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

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

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

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

Пол Уильямс
источник
4

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

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

mattkelly
источник
Я также использовал это, однако сегодня я обнаружил, что довольно старая версия 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 /?' надеюсь, это поможет

proximace
источник
2

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

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

Ahmad
источник
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как обычно.

falsePockets
источник