2011年6月8日水曜日

FC = ファイルの内容を比較して、それらの違いを表示する - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。ファイルとフォルダー関連
○Windows XP
2つのファイルの内容を比較します。

o 2つのファイル名に同時にワイルドカード(「*」や「?」)を指定する時は、制限事項があります。
o バイナリファイルの比較をする事も出来ます。但し、大きなファイルの比較には向いていません。


**** 書式
--------
fc [オプション] 比較したいファイル名 比較相手のファイル名
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
o オプション = 下記のオプションを、半角空白区切りで並べます。
    + オプションを省略した時は、次のように動きます。
        + 不一致行と、前後1行を表示します。
        + テキストファイルとして比較します。
        + タブを空白に置き換えたりはしません。
        + 日本語版の場合、文字コードShift JIS (cp932)で比較します。
FC コマンドのオプション一覧
名前意味
/bバイナリモードで比較します。
長い方のファイルを基準にして、不一致バイトを全部表示します。
テキストファイル用のオプションを一緒に指定しても、それらのオプションを無視します。
/n左側に行番号を表示します。不一致行がある時に、一緒に表示します。
/a不一致行が連続している時に、表示する行数を減らします。
次のどちらかの形式で表示します。
o 連続する不一致行を「...」1行に置き換え、不一致行の前後の1行と共に表示します。
o もしくは、連続する不一致行の内1行と、不一致行の前後の1行を表示します。
/c英字の大文字と小文字を区別しません。
/l
(= /L)
ファイルを ASCII テキストとして比較します。
とヘルプにはありますが、オプション無しと変わらないみたいです。
文字コード Shift-JISのWindows仕様(= cp932)で読み込みます。
/lb数字
(= /LB数字)
比較を途中で止める時の、連続不一致行数を指定します。
指定した値よりも不一致行が多いと、ファイルを最後まで比較するのを止めて、メッセージを出します。「再同期に失敗しました。ファイルが著しく異なります。」
/off
または /offline
オフライン属性が設定されたファイルも比較します。
このオプションについては、to_dkでは動作確認していません。
/tタブを空白に変換せずに比較します。
/w と併用した時に効果があります。
/uUnicodeのテキストファイルとして比較します。
/w連続した空白 (タブと半角空白) を 1 つの空白に圧縮して比較します。
/数字一致行の判定で使います。不一致行の直後に並ぶ連続一致行数を指定します。
この行数未満で不一致行が再び現れた時は、それまでに一致した行も不一致行として扱います。

o 比較したいファイル名 = このファイルに対して比較を行います。
    + ワイルドカード(「*」や「?」)を指定する事も出来ます。
    + フォルダーを指定する事は出来ませんので、c:\ミクさん\* のように指定します。
    + 対応するファイルが「比較相手のファイル名」から見つからない時は、きっちりエラーになります。
o 比較相手のファイル名 = 指定方法は「比較したいファイル名」と同じです。
    + 両方のファイル名に対してワイルドカードを使う時、上手に比較出来ないパターンがありますので注意します。
    + 詳細は「FCコマンドで、ファイル名のワイルドカードが正しく動かないパターン
--------
rem 成功するパターン
fc a*.txt b*.txt
fc c:\a\*.txt c:\b\*.txt

rem 失敗するパターン
fc *a.txt *b.txt
fc m*a.txt m*b.txt
--------

    + この他に、ワイルドカードを使って「比較したいファイル名」よりも多くのファイルを指定すると、余ったファイルを無視します。


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o 0 = ファイル内容の一致
    + 「FC: 相違点は検出されませんでした」 = 2つのファイルの内容は一致しました。
    + 比較した全てのファイルが一致していた時に 0になります。
    + 「比較したいファイル名」が不足している場合、エラーになりませんので気を付けます。
o 1 = ファイル内容に相違有り
    + 比較した1つ以上のファイルが相違していた時に 1になります。
    + 「FC: ファイル1 は ファイル2 より長いファイルです」 = ファイルの長さが異なります。
        + /B指定時など、比較結果を表示出来ない時に出てくるみたいです。
    + 「FC: ミクさん.TXT を開けません。このファイルまたはフォルダは存在しません」 = 「比較相手のファイル名」が見つかりませんでした。
    + 「再同期に失敗しました。ファイルが著しく異なります。」 = 差分表示を途中で止めました。
        + このメッセージは、/LB数字 オプション専用です。
o 2 = 書式エラー
    + 「FC: ネギ.TXT を開けません。このファイルまたはフォルダは存在しません」 = 指定したファイルが見つかりませんでした。


**** 機能
o 2つのファイルの内容を比較します。
    + ワイルドカード(「*」や「?」)を使用する事も出来ます。但し、書き方に制限事項がありますので注意します。
    + 詳細は「FCコマンドで、ファイル名のワイルドカードが正しく動かないパターン
o 最初に、比較するファイル名を出力します。「例。ファイル ミクさん.txt と ネギ.TXT を比較しています」
o 次に、相違点を出力します。
o /B(= バイナリモード)指定時、次のように動作します。
    + 2つのファイルの長さが異なっていると、全行異なるものとして扱います。
    + 相違する文字のみ表示します。
o テキストモード(= /Bを指定しない)の時、次のように動作します。
    + 何もオプションを指定しない時は、不一致行と、その前後1行を表示します。
    + 不一致行の判定方法や表示方法は、オプションで変更する事が出来ます。
o 長さが異なると、最後に説明文を出力します。「例。FC: ミクさん.TXT は ネギ.txt より長いファイルです」

**** 使用例
--------
fc ミクさん.txt ミクさん.bak

fc /c c:\ミクさん\*.txt c:\ミクさんバックアップ\*.txt
--------

    + コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。


**** メモ
o 文字コードが UTF-8 のファイルも比較出来るみたいです。
    + 但し、Windows XPでは、比較結果の内、漢字などが文字化けします。
    + 比較結果を目視で確認する時は、行番号を表示(= /N)する事をおすすめします。


**** 確認したバージョン
o Windows XP Service Pack 3 -- 但し、to_dk未検証項目あり(= /OFFLINE)


==
関連ページ:
    ▼Windowsコマンド。ファイルとフォルダー関連▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > COMP = ファイルの内容を比較する。最後に質問あり版
    DISKCOMP = フロッピーディスクの内容を比較する。途中に質問あり版
    SORT = ファイルの内容やコマンド出力結果を並べ替えて表示する
(2011年8月22日追加。戻り値欄にて、メッセージを1つ追加)