FC

Команда FC позволяет сравнить содержимое двух или нескольких файлов.

Формат командной строки:

FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn][диск1:][путь1]имя_файла1 [диск2:][путь2]имя_файла2

или
FC /B [диск1:][путь1]имя_файла1 [диск2:][путь2]имя_файла2

/A - Вывод только первой и последней строк для каждой группы различий.

/B - Сравнение двоичных файлов.

/C - Сравнение без учета регистра символов.

/L - Сравнение файлов в формате ASCII.

/Lbn - Максимальное число несоответствий для заданного числа строк.

/N - Вывод номеров строк при сравнении текстовых файлов ASCII.

/OFF[LINE] - Не пропускать файлы с установленным атрибутом "Автономный".

/T - Символы табуляции не заменяются эквивалентным числом пробелов.

/U - Сравнение файлов в формате UNICODE.

/W - Пропуск пробелов и символов табуляции при сравнении.

/nnnn - Число последовательных совпадающих строк, которое должно встретиться после группы несовпадающих.

[диск1:][путь1]имя_файла1 - Указывает первый файл или набор файлов для сравнения.

[диск2:][путь2]имя_файла2 - Указывает второй файл или набор файлов для сравнения.


Для получения краткой справки используется параметр /?: FC /?

Если в командной строке не задан параметр /B то сравнение выполняется построчно, с выводом результатов в виде имен файлов и несовпадающих строк:

Сравнение файлов FILE1.TXT и FILE2.TXT

***** FILE1.TXTline

line1
line2
head

***** FILE2.TXT

строка1
строка2
head
*****


В приведенном примере не совпало содержимое первых 2-х строк в файлах FILE1.TXT и FILE2.TXT. Кроме не совпавших строк, в результатах сравнения отображается первая совпавшая после них строка ( head )

Если выполняется команда сравнения двоичных файлов FC /B, то независимо от формата данных, выполняется побайтное сравнение с выдачей результатов в виде:

Сравнение файлов file1.txt и file2.txt

00000001: 6C 31
00000002: 69 44

Строка 00000001: 6C 31 - означает, что смещение от начала файла равно 00000001 . В файле file1.txt поданному смещению находится байт с шестнадцатеричным значением 6C, а в файле file2.txt - 31

Примеры использования FC.EXE:

fc /b etalon.exe C:\windows\system32\notepad.exe - сравнить двоичный файл etalon.exe из текущего каталога с файлом C:\windows\system32\notepad.exe

fc /b D:\windows\system32\dllcache\*.exe D:\windows\system32\*.* | more - сравнить группы двоичных файлов с расширением exe из каталога D:\windows\system32\dllcache\ с файлами из каталога D:\windows\system32\. Благодаря использованию команды FC в цепочке с командой more, выдача результатов на экран выполняется в постраничном режиме.

fc C:\Documents\*.txt D:\documents\*.* > C:\compare.txt - сравнить текстовые файлы в разных каталогах с записью результатов в файл C:\compare.txt.

FC /LB2 C:\Documents\*.txt D:\documents\*.* > C:\compare.txt - как и в предыдущем случае, но в результатах сравнения будут отображаться не более 2-х несовпадений.

Параметр /nnn позволяет управлять продолжением выполнения сравнения файлов. Например, имеется 2 текстовых файла file1.txt и file2.txt, в которых 1-я и 4-я строки различаются, а 2-я и 3-я - совпадают. В зависимости от значения /nnn утилита FC.EXE может либо прекратить дальнейшее сравнение файлов, либо продолжить:

FC /2 file1.txt file2.txt - после первой не совпавшей строки имеются 2 совпавшие ( 2-я и 3-я строки - одинаковые) - сравнение файлов будет продолжено.

FC /3 file1.txt file2.txt - параметр /3 требует наличия 3- х совпадающих строк после несовпадения, поэтому дальнейшее сравнение файлов будет прекращено.

FC /A /L /C file1.txt file2.txt - выполнить сравнение текстовых файлов в формате ASCII , без учета регистра символов, с отображением только первой и последней строк для каждой группы различий.

В командных файлах, для проверки результата сравнения файлов используется анализ значения переменной ERRORLEVEL.

По результату выполнения операции сравнения, переменная ERRORLEVEL может принимать следующие значения:

0 - файлы совпали.

1 - файлы не совпали

2 - ошибка открытия файла ( файл не найден)

Пример командного файла :

@echo off
fc file1.txt file2.txt > nul
if ERRORLEVEL 1 goto Different
echo Файлы совпадают
REM подпрограмма, выполняющаяся при совпадении файлов. . .
exit
:Different
echo Файлы НЕ совпадают
REM подпрограмма, выполняющаяся при различии файлов. . .

Синтаксис

fc [/a] [/b] [/c] [/l] [/lb n] [/n] [/t] [/u] [/w] [/nnnn] [ диск1:][путь1]имяфайла1 [диск2:][путь2]имяфайла2

Параметры

/a
Задает сокращенный вывод ASCII сравнения. Вместо вывода фсех различающихся строк, fc выводит только начальную и конечную строки отличающихся участков.
/b
Сравнивает файлы в двоичном режиме. Команда fc сравнивает два файла байт за байтом и не пытается сопоставить файлы после найденного отличия. Этот режим используется по умолчанию для сравнения файлов с расширениями: .exe, .com, .sys, .obj, .lib или .bin.
/c
Сравнивает без учета заглавных и строчных букв.
/l
Сравнивает файлы в текстовом (ASCII) режиме. Команда fc сравнивает два файла строка за строкой и пытается сопоставить их, после того как найдено отличие. Этот режим используется по умолчанию для сравнения файлов, исключая файлы со следующими расширениями: .exe, .com, .sys, .obj, .lib или .bin.
/lbn
Задает количество строк n для внутреннего буфера. По умолчанию длина буфера составляет 100 строк. Если количество отличающихся строк в сравниваемых файлах превышает это число, команда fc прекращает сравнение.
/n
Задает вывод номеров строк при сравнении в текстовом режиме.
/t
Предотвращение fc от преобразования меток табуляции в пробелы. По умолчанию табуляторы заменяются пробелами с остановкой в каждой восьмой позиции.
/u
Задает сравнение файлов в текстовом формате Юникод.
/w
Задает сжатие пробелов и табуляций при сравнении. Если в строке содержится несколько пробелов или табуляций подряд, при использовании ключа /w они будут рассматриваться как один. Когда используется ключ /w, программа fc игнорирует (и не сравнивает) пробелы и табуляции в начале и в конце строки.
/nnnn
Задает количество совпадающих строк, используемых программой fc при новом сопоставлении файлов. Если количество совпадающих строк в файле меньше nnnn, программа fc будет выводить совпадающие строки как отличающиеся. По умолчанию значение равно 2.
[диск1:][путь1]имяфайла1
Задает местоположение и имя первого файла для сравнения. Параметр имяфайла1 является обязательным.
[диск2:][путь2]имяфайла2
Задает местоположение и имя второго файла для сравнения. Параметр имяфайла2 является обязательным.
/?
Отображение справки в командной строке.

Заметки

  • Вывод различий между файлами при текстовом сравнении в формате ASCII

    При использовании программы fc для сравнения ASCII, fc отображает различия между двумя файлами в следующем порядке:

    • имя первого файла;
    • строки из параметра имяфайла1, которые отличаются в файлах;
    • первая строка, совпадающая в обоих файлах;
    • имя второго файла;
    • отличающиеся строки из параметра имяфайла2;
    • первая строка совпадения.
  • Использование /b для двоичного сравнения

    /b отображает несоответствия, найденные в течение двоичного сравнения, как показано ниже.

    xxxxxxxx: yy zz

    Величина xxxxxxxx задает относительный шестнадцатеричный адрес пары различающихся байтов, отсчитываемый от начала файла. Адресация начинается с 00000000. Шестнадцатеричные величины yy и zz представляют различающиеся байты из имяфайла1 и имяфайла2 соответственно.

  • Использование подстановочных знаков

    Можно использовать подстановочные знаки (* and ?) в параметрах имяфайла1 и имяфайла2. Если они использованы при задании первого файла имяфайла1, программа fc будет сравнивать все заданные файлы с файлом, указанным в параметре ИмяФайла. Если подстановочные знаки использованы при задании файла имяфайла2, fc при сравнении будет использовать соответствующие значения параметра имяфайла1.

  • Работа с памятью

    При сравнении в текстовом режиме программа fc использует внутренний буфер (достаточный для размещения 100 строк). Если размер файлов больше размера буфера, программа fc будет сравнивать те части, которые поместились в буфер. Если fc не обнаруживает совпадения в загруженных частях файлов, программа остановится и будет выведено следующее сообщение:

    Не удается выполнить синхронизацию строк. Слишком много различий между файлами.

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

Примеры

Чтобы сравнить два текстовых файла с именами Monthly.rpt и Sales.rpt и вывести результат в сокращенном формате, введите:

fc /a monthly.rpt sales.rpt

Для двоичного сравнения двух пакетных файлов Profits.bat и Earnings.bat введите:

fc /b profits.bat earnings.bat

Результат будет иметь следующий вид:


00000002: 72 43
00000004: 65 3A
0000000E: 56 92
00000012: 6D 5C
00000013: 0D 7C
00000014: 0D 0A
00000015: 0A 0D
0000001E: 43 7A
0000001F: 09 0A
00000022: 72 44
...
...
...
000005E0: 00 61
000005E1: 00 73
000005E2: 00 73
000005E3: 00 69
000005E4: 00 67
000005E5: 00 6E
000005E6: 00 6D
000005E7: 00 65
000005E8: 00 6E
FC: Earnings.bat длиннее, чем Profits.bat

Если файлы Profits.bat и Earnings.bat одинаковы, fc выводит на экран следующее сообщение:

FC: различия не найдены

Для сравнения каждого файла .bat в текущем каталоге с файлом New.bat введите:

fc *.bat new.bat

Для сравнения файла New.bat на диске C с файлом New.bat на диске D введите:

fc c:new.bat d:*.bat

Для сравнения каждого пакетного файла в корневом каталоге диска C с файлом с таким же именем в корневом каталоге на диске введите:

fc c:*.bat d:*.bat

Категория: Команды | Добавил: masterov (12.11.2017) | Автор: Андрей Мастеров E W
Просмотров: 6 | Теги: команды Windows, Синтаксис | Рейтинг: 0.0/0
Другие материалы по теме:
Всего комментариев: 0
avatar