Команда FC (File Compare) сравнивает содержимое двух файлов и показывает строки или байты, в которых они отличаются. Это стандартный инструмент CMD без зависимостей — удобно для быстрой проверки конфигов, лог-файлов и скриптов, когда сторонний diff-инструмент под рукой недоступен.
- Синтаксис команды FC
- Ключи и параметры
- Примеры использования
- Базовое сравнение двух текстовых файлов
- Сравнение с игнорированием регистра
- Побайтовое сравнение бинарных файлов
- Сравнение с выводом номеров строк
- Сравнение с ограничением буфера для больших файлов
- Сравнение файлов Unicode
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- Как использовать FC в скрипте для автоматической проверки?
- FC умеет сравнивать больше двух файлов сразу?
- Чем FC отличается от COMP?
- Как перенаправить вывод FC в файл?
- Работает ли FC с файлами в разных кодировках?
Синтаксис команды FC
FC [ключи] файл1 файл2
Плейсхолдеры:
файл1,файл2— полные или относительные пути к сравниваемым файлам. Поддерживаются маски (*,?) для пакетного сравнения.
Ключи и параметры
| Ключ | Описание | Пример |
|---|---|---|
/A | Сокращённый вывод: показывает только первую и последнюю строки каждого блока различий | FC /A old.txt new.txt |
/B | Двоичное (побайтовое) сравнение. Подходит для EXE, DLL, изображений | FC /B file1.exe file2.exe |
/C | Игнорировать регистр символов при сравнении текстовых файлов | FC /C config1.ini config2.ini |
/L | Построчное сравнение в ASCII-режиме (по умолчанию для текстовых файлов) | FC /L a.txt b.txt |
/LBn | Ограничить буфер построчного сравнения n строками (по умолчанию 100) | FC /LB500 huge1.log huge2.log |
/N | Отображать номера строк при построчном сравнении | FC /N script1.bat script2.bat |
/T | Не преобразовывать табуляции в пробелы | FC /T file1.py file2.py |
/U | Сравнивать файлы как Unicode (UTF-16) | FC /U doc1.txt doc2.txt |
/W | Игнорировать пробелы и табуляции при сравнении | FC /W source1.c source2.c |
Примеры использования
Базовое сравнение двух текстовых файлов
Самый простой вариант: проверить, идентичны ли два файла.
FC C:\reports\report_old.txt C:\reports\report_new.txt
Если файлы одинаковы, будет выведено «FC: различий не найдено». Если есть отличия — команда покажет блоки расходящихся строк с контекстом.
Сравнение с игнорированием регистра
Удобно при сравнении конфигурационных файлов, где регистр ключей не важен.
FC /C C:\config\old.ini C:\config\new.ini
Строки «Value=YES» и «value=yes» будут считаться идентичными.
Побайтовое сравнение бинарных файлов
Позволяет проверить, изменился ли исполняемый файл или образ.
FC /B C:\backup\app.exe C:\current\app.exe
Команда выведет смещения (offset) и значения байтов, которые отличаются. Если файлы идентичны — «FC: различий не найдено».
Сравнение с выводом номеров строк
При разборе скриптов и логов номер строки сразу указывает, где искать изменение.
FC /N C:\scripts\deploy_v1.bat C:\scripts\deploy_v2.bat
Перед каждой расходящейся строкой будет выведен её номер.
Сравнение с ограничением буфера для больших файлов
По умолчанию FC буферизует 100 строк. Для файлов с большими блоками изменений это значение нужно увеличить.
FC /LB1000 C:\logs\server_old.log C:\logs\server_new.log
Буфер увеличен до 1000 строк — FC не потеряет контекст при сравнении крупных блоков.
Сравнение файлов Unicode
Если файлы сохранены в UTF-16 (стандарт для ряда системных файлов Windows), нужен ключ /U.
FC /U C:\old\strings.txt C:\new\strings.txt
Без этого ключа двухбайтовые символы могут читаться некорректно и давать ложные различия.
Частые ошибки и решения
| Ошибка / симптом | Причина | Решение |
|---|---|---|
| «FC: не удаётся открыть файл» — команда завершается без результата | Неверный путь или файл не существует | Проверьте путь через DIR путь_к_файлу; используйте полные пути в кавычках, если в имени есть пробелы |
| Кодовые страницы отображаются как каша при кириллице | CMD использует кодовую страницу 866, файлы в UTF-8 | Переключите страницу перед запуском: CHCP 65001, затем выполните FC |
| «FC: буфер переполнен» — сравнение прерывается | Блок отличий превышает буфер (100 строк по умолчанию) | Увеличьте буфер: FC /LB500 или FC /LB2000 |
| FC показывает различия, хотя файлы визуально одинаковы | Разные окончания строк (CRLF vs LF) или BOM | Для текста используйте FC /W чтобы игнорировать пробельные символы; или конвертируйте файлы в одинаковую кодировку |
| Код возврата всегда 0, хотя файлы разные | Оценка кода возврата в скрипте ведётся неверно | FC возвращает 0 — файлы идентичны, 1 — есть различия, 2 — ошибка. Проверяйте %ERRORLEVEL% после команды |
Когда применять, а когда нет
Команда FC подходит для быстрого diff-анализа прямо в терминале, особенно в среде без GUI. Удобна в BAT/CMD-скриптах для автоматической проверки результатов: ненулевой %ERRORLEVEL% сигнализирует о расхождении. Для сложного diff с цветовым выделением, трёхстороннего сравнения или работы с большими бинарными образами FC недостаточно — используйте WinMerge или git diff. Аналог в PowerShell — Compare-Object (Get-Content f1.txt) (Get-Content f2.txt), который даёт более гибкую фильтрацию вывода.
FAQ
Как использовать FC в скрипте для автоматической проверки?
После вызова FC проверяйте %ERRORLEVEL%: 0 — файлы идентичны, 1 — есть различия, 2 — ошибка выполнения. Пример: FC file1.txt file2.txt > NUL && ECHO Идентичны || ECHO Различаются.
FC умеет сравнивать больше двух файлов сразу?
Нет, FC сравнивает строго два файла за один вызов. Для пакетного сравнения используйте цикл FOR в скрипте.
Чем FC отличается от COMP?
COMP работает только в побайтовом режиме и не показывает строки с различиями. FC умеет и побайтовое (/B), и построчное сравнение, и выводит контекст изменений — он более информативен.
Как перенаправить вывод FC в файл?
Стандартным перенаправлением: FC file1.txt file2.txt > diff.txt. Если нужно только проверить наличие различий без вывода — FC file1.txt file2.txt > NUL.
Работает ли FC с файлами в разных кодировках?
FC не конвертирует кодировки автоматически. Если файлы в разных кодировках, результат будет некорректным. Перед сравнением приведите файлы к одной кодировке или используйте PowerShell с явным указанием -Encoding.


