Windowsで設定ファイルを書き換えた際、元のファイルとどこが違うのか分からなくなることがあります。
そんな時に便利なのが、Windowsに標準搭載されている「fc」コマンドです。
fcは「File Compare」の略称であり、2つのファイルを比較して差異を表示するための強力なツールです。
外部ツールをインストールすることなく、コマンドプロンプト上で素早く内容の不一致を確認できるのが最大の利点です。
本記事では、fcコマンドの基本的な使い方から、実務で役立つ便利なオプションまで詳しく解説します。
fcコマンドとは
fcコマンドは、Windows OSに含まれる標準のコマンドラインツールです。
主に2つのテキストファイルやバイナリファイルの差分(デフ)を確認するために使用されます。
ファイルの修正箇所を確認したり、コピーしたファイルが正しく転送されたかをチェックしたりする際に重宝します。
特にサーバー環境や、GUIツールが使えない状況において、コマンド一つで比較ができる点は非常に有用です。
fcコマンドの基本構文
fcコマンドの最もシンプルな使い方は、比較したい2つのファイルパスを並べて記述することです。
fc [オプション] ファイル名1 ファイル名2
例えば、「test1.txt」と「test2.txt」を比較する場合、次のように入力します。
fc test1.txt test2.txt
実行すると、ファイルの内容に違いがある場合は、その箇所のテキストが画面に表示されます。
もし内容が完全に一致している場合は、「FC: 相違点は検出されませんでした」というメッセージが出力されます。
主要なオプション一覧
fcコマンドには、比較の精度を高めたり、出力を調整したりするためのオプションが多数用意されています。
利用頻度の高いオプションを以下の表にまとめました。
| オプション | 説明 |
|---|---|
| /A | ASCII比較の差異を省略して表示します。 |
| /B | バイナリ比較(2進比較)を行います。 |
| /C | 英字の大文字と小文字を区別せずに比較します。 |
| /L | ファイルをテキスト(ASCII)として比較します(デフォルト)。 |
| /N | テキスト比較時に行番号を表示します。 |
| /T | タブをスペースに変換せずにそのまま比較します。 |
| /W | 連続する空白(スペースやタブ)を1つの空白として扱い、無視します。 |
| /LBn | 不一致が続いた場合に比較を続行する行数を指定します(nには数値を指定)。 |
テキストファイルの比較方法
デフォルトでは、fcコマンドはテキストファイルとして比較を行います。
ファイル拡張子が .txt などの場合、自動的にテキストモードが適用されます。
行番号を表示して比較する(/N)
長いファイル同士を比較する場合、どこに違いがあるのかを行番号で特定できると便利です。
/Nオプションを使用することで、差異がある箇所の行番号を付与して出力できます。
fc /n file1.txt file2.txt
ファイル file1.txt と FILE2.TXT を比較しています
***** file1.txt
1: こんにちは
2: これはテストです。
3: Windows 11
***** FILE2.TXT
1: こんにちは
2: これはテストです。
3: Windows 10
*****
このように、3行目の内容が異なっていることが一目でわかります。
大文字・小文字を区別せずに比較する(/C)
プログラムのソースコードや設定ファイルを比較する際、大文字と小文字の違いを無視したい場合があります。
その場合は、/Cオプションを付与します。
fc /c config_old.conf config_new.conf
これにより、「Setting」と「setting」といった記述の違いを無視して、実質的な内容の差分のみを抽出できます。
空白文字の違いを無視する(/W)
インデントの深さや、行末に余計なスペースが入っているだけの違いを無視したいこともあります。
/Wオプションを使うと、連続する空白やタブを1つの空白として圧縮して比較します。
文章の体裁よりも、書かれている言葉の内容そのものを比較したい場合に役立ちます。
バイナリファイルの比較方法
実行ファイル(.exe)や画像ファイル、圧縮ファイルなどの内容が同一かどうかを調べたいときには、バイナリ比較を用います。
バイナリ比較を行うには、/Bオプションを必ず指定してください。
fc /b program1.exe program2.exe
バイナリモードでは、ファイルの各バイトが比較され、差異がある箇所のアドレスと値が16進数で表示されます。
出力例は以下の通りです。
ファイル program1.exe と program2.exe を比較しています
00000010: 4A 4B
00000015: 01 02
左側の数値がファイル内のオフセットアドレス、中央がファイル1の値、右側がファイル2の値を示しています。
ファイルサイズが異なる場合、バイナリ比較は行われますが、最後に「ファイル 1 がファイル 2 より長い」といった警告が表示されます。
バッチファイルでの活用方法
fcコマンドは、バッチファイルの中で自動判定処理を行う際にも非常に強力です。
fcコマンドが終了すると、ErrorLevel(終了コード)が設定されます。
- 0:2つのファイルは同一です。
- 1:2つのファイルは異なります。
- 2:ファイルが見つからないか、オプションに誤りがあります。
この性質を利用して、ファイルに差異がある場合のみバックアップを取るといった自動化が可能です。
@echo off
fc file_a.txt file_b.txt > nul
if %errorlevel% == 0 (
echo ファイルは同じです。
) else (
echo ファイルに違いが見つかりました!
)
上記の例では、> nulを使用して比較結果の出力を非表示にし、判定結果のみを表示しています。
fcコマンド使用時の注意点
fcコマンドは便利なツールですが、いくつかの制限事項もあります。
まず、非常に巨大なテキストファイルを比較する場合、メモリ不足や「再同期ができません」といったエラーが発生することがあります。
これは、fcコマンドが内部的に差異を管理するバッファサイズに限界があるためです。
その場合は、/LBnオプションを使用して、再同期を試みる行数を増やすことで解決できる場合があります。
また、Unicode(UTF-8など)のファイルを比較する際、BOMの有無によって不一致と判定されることがある点にも注意が必要です。
日本語が含まれるファイルの場合、文字コードの設定によっては正しく表示されないことがありますが、比較自体は行われます。
PowerShellのCompare-Objectとの違い
現在のWindows環境では、PowerShellのCompare-Object(別名:diff)も利用可能です。
Compare-Objectはオブジェクトとして比較を行うため、非常に柔軟なフィルタリングが可能です。
しかし、単純に「2つのファイルが同じかどうかを速く知りたい」という目的であれば、fcコマンドの方がシンプルで高速です。
レガシーなコマンドですが、その軽量さと確実性から、現在でもプロフェッショナルの現場で愛用されています。
まとめ
fcコマンドは、Windows標準で利用できる非常に強力なファイル比較ツールです。
テキスト比較で見つけにくい改行や空白の差異を特定したり、バイナリ比較でデータの整合性を確認したりと、用途は多岐にわたります。
/N(行番号表示)や/B(バイナリ比較)といった主要なオプションを覚えるだけで、作業効率は劇的に向上します。
まずは身近なファイルの比較から試して、その便利さを実感してみてください。
コマンドプロンプトを使いこなすことで、トラブルシューティングや自動化の幅が大きく広がることでしょう。
