Programming Field

Comp - DOS/コマンドプロンプト コマンド一覧

[Windows 2000?以降] 2つ以上のファイルまたはファイルセットの比較を1バイト単位で行い、相違があるかどうかを出力します。

構文

comp[.exe] [<file-set1>] [<file-set2>] [/D] [/A] [/L] [/N=<n>] [/C] [/OFF[LINE]]

オプション一覧

<file-set1> 比較するファイルセット(比較元)を指定します。ディレクトリ名やワイルドカードが指定でき、その場合ディレクトリ内に存在するファイルすべて、またはワイルドカードに当てはまるファイルが <file-set2> が比較されます。
<file-set2> 比較先のファイルを指定します。ワイルドカードを指定すると <file-set1> を元に自動的にファイル名が作られ、そのファイルと比較を行います(<file-set1> にワイルドカードを指定した場合とは異なる挙動をします)。例として、<file-set1> がディレクトリ名で <file-set2> がワイルドカードまたはディレクトリ名である場合は、<file-set1> 内のファイルすべてに対応するファイルを <file-set2> から検索(ワイルドカードである場合は欠けている部分を元ファイル名から補完)して比較します。
/D 比較した結果ファイルサイズが同じで相違点がある場合、その相違していた内容1バイトを10進数の値で出力します。
/A

比較した結果ファイルサイズが同じで相違点がある場合、その相違していた内容1バイトをASCII文字で出力します。/D と /A がある場合は /A が優先されます。

/D も /A も指定しなかった場合は相違内容が16進数で出力されます。

/L 比較した結果ファイルサイズが同じで相違点がある場合、相違していた場所を行番号で出力します。/L を指定しなかった場合は相違場所の(ファイル先頭を0とした)オフセットを16進数表記で出力します。
/N=<n> 比較の際最初から数えて <n> で指定した行数だけ比較します。このオプションを指定するとファイルサイズが一致していない場合でも(ファイルサイズ不一致エラーで終了せず)詳細な比較が行われるようになります。
/C アルファベットの大文字・小文字を区別しません。
/OFF[LINE] [Windows 10以降] オフライン属性が指定されているファイルをスキップしません。

なお、<file-set2> が省略されている場合は <file-set2> の、<file-set1> が省略されている場合は <file-set1> の入力を促すプロンプトが表示されます。また、その際にオプションが1つも指定されていない場合はオプション入力を促すプロンプトも表示されます。

解説

Comp使用例

2つ以上のファイルを比較して画面(標準出力)にその結果を出力します。Fcと以下の点で異なる挙動をします。

  • 常にバイト単位で比較するため、ある行において一方が1文字でも多い文字列になっている場合でもずれている分を調整しない
  • (/N を指定しない場合)ファイルサイズが異なるとその時点で比較を打ち切る
  • バイト単位の比較で相違する場合にその値を10進数またはASCII文字で出力することが可能
  • バイト単位の比較で大文字・小文字を区別しないオプションを使用可能
  • 相違箇所が10箇所を超える場合にその時点で比較を打ち切る
  • 比較対象のファイルセットにディレクトリ名をそのまま指定することが可能(Fcの場合はワイルドカードが必要)
  • 比較終了後、別のファイルを比較するかどうかを尋ねるプロンプトが表示される

なお、(最後の)ファイル比較が一致という結果だった場合、Compは終了コード 0 を、一致していなかった場合は 1 を返します。

以下の2ファイルを比較することを考えます(データはASCII文字表記、改行文字はCR LFです)。

・data1.txt

ABC_DEF_G
HIJ

・data2.txt

AbC_DE_F
GHIJ

これを「comp data1.txt data2.txt」で比較すると以下のような出力になります。

data1.txt と data2.txt を比較しています...
OFFSET 1 で比較エラーがあります
ファイル1 = 42
ファイル2 = 62
OFFSET 6 で比較エラーがあります
ファイル1 = 46
ファイル2 = 5F
OFFSET 7 で比較エラーがあります
ファイル1 = 5F
ファイル2 = 46
OFFSET 8 で比較エラーがあります
ファイル1 = 47
ファイル2 = D
OFFSET 9 で比較エラーがあります
ファイル1 = D
ファイル2 = A
OFFSET A で比較エラーがあります
ファイル1 = A
ファイル2 = 47

「comp data1.txt data2.txt /L /A」で比較した場合は以下のような出力になります。

data1.txt と data2.txt を比較しています...
LINE 1 で比較エラーがあります
ファイル1 = B
ファイル2 = b
LINE 1 で比較エラーがあります
ファイル1 = F
ファイル2 = _
LINE 1 で比較エラーがあります
ファイル1 = _
ファイル2 = F
LINE 1 で比較エラーがあります
ファイル1 = G
ファイル2 =
LINE 1 で比較エラーがあります
ファイル1 =
ファイル2 =

LINE 2 で比較エラーがあります
ファイル1 =

ファイル2 = G