Как с помощью командной строки сравнить два текстовых или бинарных файла

Бывают случаи, когда у пользователей возникает необходимость проверить два файла на идентичность. Чаще всего с подобной задачей сталкиваются начинающие веб-разработчики и программисты. Отыскивать несоответствия в одинаковых с виду файлах приходится редакторам, корректорам и прочим специалистам, работающим с текстовыми данными.


По идее для этих целей лучше всего использовать специальные утилиты, например WinMerge, но файлы также можно сравнивать с помощью самой обыкновенной командной строки. В командной оболочке всех версий Windows имеется замечательная команда FC. Она позволяет сравнивать между собой любые файлы, причём как текстовые, так и бинарные. Синтаксис этой команды очень прост и выглядит он следующим образом:

FC /ключ [полный путь к первому файлу] [полный путь ко второму файлу]

Список доступных ключей можно просмотреть, набрав и выполнив в консоли CMD команду FC /?. Справка даётся на русском языке, так что вы без труда разберетесь, что к чему.

FC /?

А теперь немного практики. Допустим, у вас есть два файла с кодом PHP и в одном из них предположительно имеются некие различия. Скрипты PHP это обычные текстовые файлы, поэтому в данном случае будем использовать ключ L предназначенный для сравнения текстовых документов в кодировке ASCII. Если скрипт содержит кириллицу, не забудьте перед выполнением команды сравнения выставить в консоли кодировку 1251, иначе на выходе вы получите крякозябры. Смена кодировки выполняется командой chcp 1251.

Смена кодировки chcp 1251

Затем сравниваем файлы:

FC /L D:/1.php D:/2.php

Сравниваем файлы

Различия между файлами выводятся в следующем порядке. Сначала идёт имя первого файла, затем строка, в которой было найдено несовпадение. За ним идёт имя второго файла и точно также указывается различающаяся строка. Если программа находит ещё несколько несоответствий в других строках, всё повторяется. В общей сложности утилита может обнаружить до 100 различий, такое ограничение имеет используемый командой fc внутренний буфер.

При поиске несоответствий в бинарных файлах используется ключ B. При этом сравнение производится побайтово. В принципе, таким способом можно сравнивать любые файлы, ведь все они по сути двоичны, просто при работе с текстовыми форматами FC может ограничиться информацией какой из сравниваемых объектов длиннее и на этом завершить свою работу.

FC /B D:/1.exe D:/2.exe

В данном примере сравниваются два исполняемых файла. Результат такого сравнения будет выглядеть примерно следующим образом:

00000040: 56 BA
00000050: 65 68
00000060: 43 72
00000070: 6U 0A

Поиск несоответствий в бинарных файлах

Если вы раньше никогда не имели дела с шестнадцатеричными редакторами, разобраться со всем этим нагромождением символов будет непросто. В общем так, каждая выведенная в консоли строка это найденное различие. Символы до двоеточия указывают на смещение от начала файла, первое двухзначное число это соответствующий смещению байт в первом файле, второе двухзначное число — соответствующий смещению байт во втором файле.

Шестнадцатеричный редактор

Какими ещё полезными возможностями обладает команда FC? Ну, например поддержкой подстановочных знаков. Если вам нужно сравнить некий файл etalon.exe с другими исполняемыми файлами в текущем каталоге, используйте команду следующего формата:

fc *.exe etalon.exe

Также с помощью подстановочных знаков можно производить пакетное сравнение файлов, расположенных в разных каталогах или разделах жёсткого диска. А что будет, если сравниваемые файлы окажутся полностью идентичными? Утилита выведет лаконичное сообщение — FC:различия не найдены.

Теги: , , ,

Предыдущая/следующая

Вам может быть интересно:

Поделиться в соц сетях:

Twitter Facebook Vk Googlepluse Linkedin

Подпишитесь на обновления этого блога по RSSRSS, RSSMAILEmail или TwitterTwitter!

Случайная подборка из рубрики:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Обсуждаемые темы:

Авторизация
*
*
Регистрация
*
*
*
Генерация пароля