fc /bは2つのファイルをバイト単位で比較します。差分の位置は0から始まる16進オフセットで、終了コードは0が一致、1が不一致、2が比較エラーです。PowerShellではfc.exeと指定します。
Windowsのコマンドプロンプトで、比較する2ファイルのパスを指定します。バイナリモードを明示すれば、拡張子が.txtでもバイト単位の比較になります。比較対象の読み取り権限があれば、通常のファイル比較で管理者起動を前提にする必要はありません。
fc /bの基本的な使い方
fc /b "file1.bin" "file2.bin"相対パスは現在のフォルダーから解決されます。場所を間違えないため、実務では完全パスを使う方法もあります。以下のパスは例なので実際のファイルへ置き換えてください。
fc /b "C:\Data\original.bin" "D:\Backup\original.bin"ヘルプを確認する場合は次のコマンドを使います。
fc /?結果の読み方:先頭バイトは00000000
差分行は「オフセット: 左のファイルのバイト 右のファイルのバイト」の順です。位置とバイト値は16進数で示されます。たとえばASCIIの「Hello」と「Helow」を比較した場合、次の差分になります。表示例の2行はコマンドではありません。
00000003: 6C 6F
00000004: 6F 7700000003は先頭から3バイト進んだ位置、つまり数え方を1番目からにすると4番目のバイトです。そこでは6C(l)と6F(o)が異なります。00000004は5番目のバイトで6F(o)と77(w)が異なります。「03は3番目」と読み違えないでください。
一致すると次の表示になります。メッセージの言語は環境によって異なるため、自動処理では文字列を探すより終了コードを判定します。
FC: no differences encountered共通部分が同じでも、末尾にバイトが追加されたファイルは不一致です。長さが違う場合には、次のように長い側が示されることがあります。
FC: file2.bin longer than file1.binスペースを含むパスは引用符で囲む
fc /b "C:\Data Files\file1.bin" "D:\Backup Files\file2.bin"2つのファイルを確実に指定したい場合は、ワイルドカードで複数ファイルを一括指定する前に、個々のファイルで確認します。ファイル更新中の比較は安定した同一時点の比較にならないため、更新を止める等、対象の取得条件も合わせてください。
終了コード0・1・2で判断する
| 終了コード | 意味 | 扱い |
|---|---|---|
| 0 | 内容のバイトが一致 | 比較した2ファイルの一致 |
| 1 | 内容が不一致 | 差分位置や長さを確認 |
| 2 | 比較時にエラー | パス・読み取り権限等を確認して再比較 |
cmd.exeのバッチでは「if errorlevel N」はN以上で真になります。2を先、1を後に判定すると比較エラーを不一致と混同しません。次は.batに保存して使う例です。パスを置き換え、目的に合う終了コードの扱いを決めてください。
@echo off
fc /b "file1.bin" "file2.bin"
if errorlevel 2 goto compare_error
if errorlevel 1 goto different
echo Files are identical.
exit /b 0
:different
echo Files are different.
exit /b 1
:compare_error
echo Comparison failed.
exit /b 2PowerShellではfc.exeを指定する
PowerShellの「fc」はFormat-Customの別名です。Windowsのファイル比較を呼ぶときは「fc.exe /b」のように.exeまで書きます。直後の外部プログラムの終了コードは「$LASTEXITCODE」で確認します。cmd.exe用の「if errorlevel」構文をPowerShellへそのまま貼り付けないでください。
テキスト比較とバイナリ比較を選ぶ
テキストをバイト単位で比べる例です。見た目の文章が同じでも、改行コード、文字エンコーディング、BOM等が異なれば不一致になる場合があります。
fc /b "file1.txt" "file2.txt"行ごとの内容を確認したい場合は、対応するテキスト形式に合わせてモードを選びます。以下はASCIIの行比較で行番号を表示する例です。/lをすべてのUTF-8やUnicodeテキストに無条件で適用せず、文字コードとヘルプを確認してください。
fc /l /n "file1.txt" "file2.txt"一致しても確認できないこと
- ファイル名・更新日時・アクセス権等の一致。fc /bが調べるのは内容のバイトです。
- 基準ファイル自体の信頼性や、違いが生じた理由。差分だけで不正な改ざんと確定できません。
- バックアップの復元可否やアプリの整合性。実際の復元とアプリ固有の検証が別途必要です。
- 圧縮・暗号化・データベース等の意味上の一致。同じ目的のデータでも保存形式が違えばバイトは異なります。
バイナリ比較は、安定した状態でコピーした通常のファイルが元ファイルと同じバイトかを確認する用途に向きます。データベースの稼働中ファイルとバックアップ形式を直接比較して、復元成功を保証する方法にはしません。練習には自分で作った短いテストファイルを使い、システムファイルや大切なデータを編集する必要はありません。
比較エラーや大量の差分が出る場合
- ファイル名、完全パス、引用符、実行したフォルダーを確認する。
- 指定した対象を読み取れるか、対象アプリがファイルを更新中でないか確認する。
- サイズ違い、文字コード、BOM、改行コード等、想定していない条件差を確認する。
- バイナリモードは差分後に位置を再同期しないため、途中にバイトを挿入すると以後も多くの差分が出ることを考慮する。
大量の差分があるだけでメモリ不足と判断しません。行比較の再同期エラーと、バイナリモードの比較は区別してください。実行する権限をむやみに広げる前に、エラー全文と終了コード、対象パスを記録します。

コメント