Man On a Mission

システム運用屋が、日々のあれこれを記録していくブログです。情報処理技術者試験の話題多し。高度試験の攻略なども。最近はやや歴史づいてます…。

【Windows】fcコマンドで二つのファイルを比較する

今日はWindows環境におけるファイルの比較について。

たまに二つのファイルの差を比較したい時があります。
この場合、WinMergeなどの比較機能を持つツールを使うのが楽ですが、仕事のPC環境だと、そういったツールを入れられないケースもあるでしょう。
幸い、その手のツールを導入しなくても、Windowsには標準でファイル比較を行うコマンドが用意されています。
コマンドプロンプトから使用することになるので、面倒に感じる方もいるでしょうが*1、目視確認するよりは大分マシです。

 fcコマンド

fcコマンドで、ファイルの比較が出来ます。
(他にもcompコマンドなんてのもあるのですが、大抵fcコマンドで事足りるので今回は取り上げません。)

テキストファイルの比較

まずはテキストファイルの比較から。
サンプルとして、以下の簡単なファイルを比較します。

a.txt

abc
def
ghi
jkl

b.txt

abc
def
ghh
jkl

b.txtは、ケアレスミスなのか3行目が「ghi」ではなく「ghh」となっています。
上記2ファイルをfcコマンドで比較します。

fcコマンドの使い方:
fc 比較したいファイル1 比較したいファイル2

D:\temp>fc a.txt b.txt
ファイル a.txt と b.txt を比較しています
***** a.txt
def
ghi
jkl
***** b.txt
def
ghh
jkl
*****

相違のある行と、その前後の行が表示されました。
しかし、これでは行数の多いテキストファイルの場合、何行目に相違があるのか調べるのが大変です。オプション「/N」をつけると行番号を表示してくれます。

D:\temp>fc /N a.txt b.txt
ファイル a.txt と b.txt を比較しています
***** a.txt
    2:  def
    3:  ghi
    4:  jkl
***** b.txt
    2:  def
    3:  ghh
    4:  jkl
*****
バイナリファイルの比較

テキストファイル以外(バイナリファイル)を比較したい場合は、fcコマンドに「/B」オプションをつけます。

D:\temp>fc /B a.bin b.bin 
ファイル a.bin と b.bin を比較しています
FC: 相違点は検出されませんでした

ただし実用的には、バイナリファイルの比較では差異がないことを確認するくらいが関の山だと思います。
相違があると以下のように表示してくれますが、バイト列の違いを表示されても…。

D:\temp>fc /B a.bin b.bin
ファイル a.bin と b.bin を比較しています
0000000C: 69 68
最後に

なお、fcコマンドのオプション一覧はこちら。
まあ、「help fc」で確認した方が早いですが。

/A 相違する各部分の 1 行目と最後の行だけを表示します。
/B バイナリの比較を実行します。
/C 英字の大文字と小文字を区別しません。
/L ファイルを ASCII テキストとして比較します。
/LBn 連続する最大不一致行を指定行数に設定します。
/N ASCII の比較で行番号を表示します。
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
/T タブをスペースに変換しません。
/U Unicode テキスト ファイルとしてファイルを比較します。
/W 連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較します。
/nnnn 不一致発見後に確認する、一致すべき連続行数を指定します。

 

 

*1:コマンドプロンプトの使いづらさ、どうにかなりませんかね…