Programming Field

Comp - DOS コマンド一覧

スポンサーリンク

[Windows XP以降?] 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]
オフライン属性が指定されているファイルをスキップしません。

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

解説

2つ以上のファイルを比較して画面(標準出力)にその結果を出力します。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