2011年6月9日木曜日

COMP = ファイルの内容を比較する。最後に質問あり版 - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。ファイルとフォルダー関連
○Windows XP
2つのファイルの内容を比較します。
FCコマンドよりも高速に比較します。そして最後に、他のファイルを比較するかどうか質問します。

o バイナリファイルとして比較します。(= テキストファイルを比較する事も可能です。)
o 大きなファイルの比較も高速です。10バイトの不一致で比較を終えるからです。
o 但し、最後に質問します。ですので、このコマンドは自動処理には向いていません。

o 2つのファイル名に同時にワイルドカード(「*」や「?」)を指定する時は、制限事項があります。FCコマンドと同じ制限です。


**** 書式
--------
comp [オプション] 比較したいファイル名 比較相手のファイル名
公式ヘルプの説明では
comp 比較したいファイル名 比較相手のファイル名 [オプション]
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
o オプション = 下記のオプションを、半角空白区切りで並べます。
    + 公式ヘルプの説明では、ファイル名の指定の後に置くとの事でした。
    + オプションを省略した時は、次のように動きます。
        + バイナリファイルとして比較します。
        + 不一致バイトがある場合は、10バイト分まで表示します。
COMP コマンドのオプション一覧
名前意味
/d不一致バイトの値を、10進数で表示します。
既定では、16進数(= 0-9,A-F)で表示します。
/a不一致バイトの値を、文字で表示します。
ヘルプには「ASCII文字(= 半角の英数字や記号)」とありますが、全角文字も正しく表示されました。
/l
(= /L)
不一致バイトの位置を、行番号で表示します。
既定では、ファイル先頭からのオフセット(= バイト位置)を表示します。
/n=数字ファイルの先頭から指定された行数分だけ比較します。
先頭行が1です。/n=1 と書いた時は、先頭行だけを比較します。
/c英字の大文字と小文字を区別しません。
/off
または /offline
オフライン属性が設定されたファイルも比較します。
このオプションについては、to_dkでは動作確認していません。

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

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

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


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o 0 = ファイル内容の一致
    + 「ファイルに違いはありません」 = 2つのファイルの内容は一致しました。
    + 比較した全てのファイルが一致していた時に 0 になります。
    + 「比較したいファイル名」が不足している場合、エラーになりませんので気を付けます。
o 1 = ファイル内容に相違有り
    + 比較した1つ以上のファイルが相違していた時に 1 になります。
    + 比較相手のファイルが存在しない時は、2 になりますので気を付けます。
    + 「オフセット 393 で比較エラーがあります」 = 相違点を発見しました。
    + 「ファイルが見つからないか、開けません: ネギ.txt」 = 差分表示を途中で止めました。
o 2 = 比較するファイルが開けない時。もしくは書式エラー
    + 「FC: ネギ.TXT を開けません。このファイルまたはフォルダは存在しません」 = 対応する「比較相手のファイル名」のファイルが見つかりませんでした。
    + 「コマンド ラインの構文が正しくありません」 = おそらく指定したオプションが間違っています。


**** 機能
o 2つのファイルの内容を比較します。フォルダーを指定する事も出来ます。
    + ワイルドカード(「*」や「?」)を使用する事も出来ます。但し、書き方に制限事項がありますので注意します。
    + 詳細は「FCコマンドで、ファイル名のワイルドカードが正しく動かないパターン
o 最初に、比較するファイル名を出力します。「例。ファイル ミクさん.txt と ネギ.TXT を比較しています...」
o 次に、相違点を出力します。
o その後に、比較結果を表示します。
o 最後に、「ほかのファイルを比較しますか (Y/N)?」と質問します。


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

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

    + コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
    + 最後に質問してきます。ですので、このコマンドは、自動処理には向いていません。


**** メモ
o 文字コードが UTF-8 のファイルも比較出来ます。
    + 但し、Windows XPで比較結果を文字で表示する時(/A)には、比較結果が正しく表示されない事があります。


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


==
関連ページ:
    ▼Windowsコマンド。ファイルとフォルダー関連▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > DISKCOMP = フロッピーディスクの内容を比較する。途中に質問あり版
    SORT = ファイルの内容やコマンド出力結果を並べ替えて表示する
    COPY = ファイルをコピーする
    +
    FCコマンドで、ファイル名のワイルドカードが正しく動かないパターン