Programming Field

Fc - DOS/コマンドプロンプト コマンド一覧

2つ以上のファイルの比較を行い、相違箇所を出力します。

構文

fc[.exe] [/L] [/A] [/C] [/LB<n>] [/N] [/T] [/W] [/<nnnn>]
  [/OFF[LINE]] [/U] <file-name1> <file-name2>
fc[.exe] /B <file-name1> <file-name2>

オプション一覧

/L ファイルをテキストファイルとして比較します。/L と /B どちらも指定しなかった場合は拡張子によって判断されます。
/A 相違する行をすべて出力せず、相違する箇所の始まりと終わりのみを出力します(間は「…」で省略して表示されます)。
/C アルファベットの大文字・小文字を区別しません。
/LB<n> 相違する行数の最大値を指定します。これを超える数の行が不一致の場合比較処理が中止されます。[MS-DOS] 指定しなかった場合は100が使われます。
/N 相違する箇所の出力時に行番号を表示します。
/T テキストファイル内のタブ文字(\x8)をタブ文字として比較します。/T を指定しない場合はタブ文字はスペース8文字分として比較されます。
/W

2文字以上の連続するスペースとタブ文字を1文字とし、行頭と行末のスペースとタブ文字を無視して比較を行います。

[MS-DOS/Windows 95/98/Me のみ] 日本語環境の場合はこのオプションにより全角スペースを半角スペースと同じ扱いにします。

/<nnnn>

一致していると判断するための最低連続行数を指定します(「/3」のように「/」と数値を組み合わせて指定します)。ある行が一致してその行の前後が不一致の場合、一致している行の数がここで指定した行数を下回っているときに一致している行を不一致と見なします。

このオプションを指定しなかった場合は「/2」が指定されたものと見なします。

/OFF[LINE] [Windows NT系] オフライン属性が指定されているファイルをスキップしません。
/U [Windows NT系] Unicodeテキストファイル(UCS-4)としてファイルを比較します。
<file-name1> 比較するファイル(比較元)を指定します。ワイルドカードが指定でき、その場合ワイルドカードに当てはまるファイルすべてと <file-name2> が比較されます。
<file-name2> 比較先のファイルを指定します。ワイルドカードを指定すると <file-name1> を元に自動的にファイル名が作られ、そのファイルと比較を行います(<file-name1> にワイルドカードを指定した場合とは異なる挙動をします)。
/B <file-name1><file-name2> をバイナリファイルとして比較します。比較は1バイト単位で行われ、ファイルサイズが異なる場合はその旨を出力します。テキストファイルの比較とは異なり、データのずれは計算されません。

解説・例

Fc使用例

2つ以上のファイルを比較して画面(標準出力)にその結果を出力します。(Linux系などに存在する「diff」のようなものですが、互換性は無くFcは簡易的な比較のみを行います。)

[Windows NT系] ファイルが一致していた場合、Fcは終了コード 0 を、一致していなかった場合は 1 を返します。また、Fcは /B を使うことで1バイト単位の比較となりますが、Compは常に1バイト単位で比較します。

テキストファイルの比較

画面出力は <file-name1><file-name2> それぞれの「一致している行」「一致していない行(複数)」「一致している行」をこの順番で出力されます。一致していない行の出力の前後には必ず一致している行が出力されます。また、不一致行(のまとまり)ごとに出力が行われます。

例えば以下の2ファイルを比較することを考えます。

・data1.txt (5行目の「R」と「S」の間はタブ文字です。)

ABC
DEF
 GHIJ
KLMNOP
  QR	STUVW
XYZ12
12345
67890

・data2.txt

ABC
XXX
DEF
$$$
GHIJ
  KLM NOP
  QR  STUVW
Xyz12
12345
67890

「fc data1.txt data2.txt」で比較した結果は以下のように出力されます。

ファイル data1.txt と DATA2.TXT を比較しています
***** data1.txt
ABC
DEF
 GHIJ
KLMNOP
  QR    STUVW
XYZ12
12345
***** DATA2.TXT
ABC
XXX
DEF
$$$
GHIJ
  KLM NOP
  QR  STUVW
Xyz12
12345
*****

「fc /1 data1.txt data2.txt」で比較した結果は以下のように出力されます。

ファイル data1.txt と DATA2.TXT を比較しています
***** data1.txt
ABC
DEF
***** DATA2.TXT
ABC
XXX
DEF
*****

***** data1.txt
DEF
 GHIJ
KLMNOP
  QR    STUVW
XYZ12
12345
***** DATA2.TXT
DEF
$$$
GHIJ
  KLM NOP
  QR  STUVW
Xyz12
12345
*****

最初の例と異なり、「DEF」の行が一致している行と見なされています。

「fc /C /N /W data1.txt data2.txt」で比較した結果は以下のように出力されます。

ファイル data1.txt と DATA2.TXT を比較しています
***** data1.txt
    1:  ABC
    2:  DEF
    3:   GHIJ
    4:  KLMNOP
    5:    QR    STUVW
***** DATA2.TXT
    1:  ABC
    2:  XXX
    3:  DEF
    4:  $$$
    5:  GHIJ
    6:    KLM NOP
    7:    QR  STUVW
*****

「/C」により「XYZ12」と「Xyz12」が、「/W」により「 QR STUVW」と「 QR STUVW」が同じ行であると見なされています。ただし「/1」は指定されていないので「 GHIJ」と「GHIJ」の行が一致していてもその前後が一致していないため不一致行のまとまりに含まれています。なお、「/N」の指定により行番号が合わせて出力されています。

バイナリファイルの比較

バイナリファイルの場合は1バイト単位の比較を行い、相違箇所を16進数で表示します。この際、相違箇所のオフセットも表示します。

例えば以下の2ファイルを比較することを考えます(データは16進数表記です)。

・data1.bin

00 01 02 13 04 05 06 07

・data2.bin

00 01 02 03 04 05 16 07

これを「fc data1.bin data2.bin」(「.bin」ファイルは自動的にバイナリファイルとして比較されます)で比較すると以下のような出力になります。

ファイル data1.bin と DATA2.BIN を比較しています
00000003: 13 03
00000006: 06 16

出力は左の数値が <file-name1> のデータ、右の数値が <file-name2> のデータです。

※ バイナリファイルの比較はすべての不一致箇所が出力されます。そのため、ファイルの内容が違いすぎる場合相当量の出力が行われます。