ファイルをテキスト比較して相違点を表示 fc

fc
かなり間が空いてしまいましたが、 久しぶりにコマンドプロンプトで使用するコマンドのご紹介です。
今日はfcというコマンドの説明をします。
このfcは、ファイルの内容を比較して相違点を表示するコマンド。
前にご紹介したcompというコマンドも、 似たような機能を持っていましたが、compが主にファイルをバイナリとして 比較するコマンドであったのに対し、fcはテキストモード・バイナリモード のどちらでも比較する事ができます。
fcでは、ファイルの比較を行う度にテキストモード比較やバイナリモード比較の オプション指定を行う必要はなく、比較するファイルの拡張子が「exe、bin、com、sys、obj、lib」 のいずれかであった場合には自動的にバイナリモード、そしてそれ以外の拡張子ならば 自動的にテキストモードでの比較が行われます。
ちなみに、敢えてタイトルに「テキスト比較して相違点を表示」と書いたのは、 テキストファイルの比較にはcompよりもfcを用いた方が実用的であるからです。
簡単なコマンドではありますが、使えれば結構便利なものです。
では、今回も様々な例を用いてこのfcというコマンドの解説を行います。

このページのトップへ

以下はfcの書式とオプションの一覧です。
fc [/a] [/c] [/l] [/lb行数] [/n] [/off[line]] [/t] [/u]
 [/w] [/行数] ファイル名1 ファイル名2
ファイル名1 比較する1番目のファイル名、またはファイルセットを指定する
ファイル名2 比較する2番目のファイル名、またはファイルセットを指定する
/a ファイルをテキストモードで比較し、相違する各部分の1行目と最終行だけを表示
/b バイナリモードで比較
/c アルファベットの大文字と小文字を区別しない
/l テキストモードで比較
/lb行数 ファイルの比較時、連続する最大相違行数を指定する(デフォルトは100行)
/n テキストモード比較で、行番号を表示
/off[line] オフライン属性が設定されたファイルも比較対象に
/t タブをスペースに変換しない(通常、タブ1個につき8文字分のスペースに変換される)
/u Unicodeテキストファイルとしてファイルを比較
/w 連続した空白(タブ、スペース)を一つのスペースとして比較
/行数 ファイルの比較時、相違部分の発見後に、再度内容が一致したとみなされる行数を指定。 (デフォルトでは2行)
fcは、2つのファイルまたはファイルセットの内容を比較し、相違点を表示するコマンドです。
compの機能とよく似ていますが、compが 主にバイナリモードで1バイトずつ比較を行って相違点を表示するのに対し、 fcではファイルによってテキストモード、バイナリモードでの比較を行い、 相違点を行単位(テキスト比較の場合)で表示します。
C:¥>fc オプション ファイル名1 ファイル名2
このページのトップへ
冒頭でも述べましたが、通常fcでは、比較対象となるファイルの拡張子が「exe、bin、com、sys、obj、lib」 のいずれかに該当する場合はバイナリモードでの比較、それ以外の拡張子を持つファイルでは テキストモードでの比較が自動で行われます。
テキストモードでの比較

C:¥sample>fc fcsamp.txt fcsamp2.txt
ファイル fcsamp.txt と FCSAMP2.TXT を比較しています
***** fcsamp.txt
ファイルを削除するコマンドはdelです。
ファイルの一覧表示をするコマンドはdirで。
ファイルの文字列検索をするのはfindです。
***** FCSAMP2.TXT
ファイルを削除するコマンドはdelです。
ファイルの一覧表示をするコマンドはdirである。
ファイルの文字列検索をするのはfindです。
*****


C:¥sample>
バイナリモードでの比較

C:¥sample>fc fcsamp.exe fcsamp2.exe
ファイル fcsamp.exe と FCSAMP2.EXE を比較しています
000000A9: B7 A0
000000AA: 81 82
000000AB: 42 E9
000000AC: 0D 81
000000AD: 0A 42
・
・
略
・
・
00000288: 0A 42
FC: FCSAMP2.EXE は fcsamp.exe より長いファイルです



C:¥sample>
テキストモードでの比較結果には、相違行の前後の行も表示されます。
また、特定の拡張子(exe、bin、com、sys、obj、lib)を持つファイルを比較した場合、 自動でバイナリでの比較が行われます。
このページのトップへ
では次に、例えば以下のような内容を持つ2つのテキストファイルを比較した場合・・
a.txt

あ
い
う
え
お
か
き
く
b.txt

あ
い
き
く
a.txtと連続する相違行を含むb.txtをfcで比較します。
実行すると・・
C:¥sample>fc a.txt b.txt
ファイル a.txt と B.TXT を比較しています
***** a.txt
あ
い
う
え
お
か
き
***** B.TXT
あ
い
き
*****


C:¥sample>
相違点を含む行が連続している場合、上記のようにまとめて表示されます。
このページのトップへ
ですが、fc/aオプションを指定して テキストモードでの比較を行った場合、 相違部分の1行目と最終行だけを表示させる事ができます。
C:¥sample>fc /a  a.txt b.txt
ファイル a.txt と B.TXT を比較しています
***** a.txt
あ
...
き
***** B.TXT
あ
...
き
*****


C:¥sample>
このページのトップへ
同じことの繰り返しになりますが、 ファイルの比較は行単位で行われ、相違点が見つかると表示されると上で書きました。
この比較の流れとしては、 まず相違点が見つかると表示、そしてその後に続く行の内容と同期後、 次の相違点が見つかるまでの間比較を続けます。
相違点を発見(表示)
↓
再度、行の内容の一致を確認(同期)
↓
次の相違点を発見(表示)
・・・
このようにfcでは、 相違点が発見されてから次にファイルの同期がとれるまでの間の行が、 ひとかたまりの相違点として表示されるわけですが、相違点が発見され、 再度ファイルの同期をとろうと試みてから一致した(同期がとれた)と判断される基準となる行数は、 デフォルトで2行と決まっています。 (内容の一致した行が2行連続して現れれば、同期がとれたとみなす)
という事は、もしも相違点を含む行が1行おきに存在していたとすれば、 全ての行がひとかたまりの相違として表示される事になってしまいます。
このページのトップへ
例えば・・・
あ
い
う
え
お
か
き
く
あ
い
う
え
お
か
き
く

一行ずつ相違点が存在する
上記の2つのファイルを比較すると・・
C:¥sample>fc a.txt b.txt
ファイル a.txt と B.TXT を比較しています
***** a.txt
あ
い
う
え
お
か
き
***** B.TXT
あ
い
う
え
お
か
き
*****

C:¥sample>


一塊の相違として表示されている
このようになります。
このページのトップへ
しかし「/行数」オプションを指定すれば、 再同期が出来たと判断される基準の行数(デフォルトは2行)を変更する事ができます。
再同期の基準の行数に1行を指定

C:¥sample>fc /1 a.txt b.txt
ファイル a.txt と B.TXT を比較しています
***** a.txt
あ
い
う
***** B.TXT
あ
い
う
*****

***** a.txt
う
え
お
***** B.TXT
う
え
お
*****

***** a.txt
お
か
き
***** B.TXT
お
か
き
*****


C:¥sample>
同期したとみなされる基準の行数を2行から1行に変更する事で、 元々はひとかたまりで表示されていた各相違行を、 わけて表示させる事ができました。
このページのトップへ
それでは、相違点が発見されてから再び同期がとれるまでの間がどれだけ長くても、
ひとかたまりの相違として全て画面上に表示されるのでしょうか。
答えはノーです。
相違点が発見されてから同期が取れるまでの間に記憶される行数は、デフォルトで100行までと決まっています。 テキストファイルを比較する場合、100行を記憶できるサイズの バッファ が記憶領域として使用されています。
連続する相違行がこの数を超える場合は、メッセージの表示と共に比較が停止します。
しかし/lb行数を指定する事で、比較時に相違を記憶する行数を設定する事ができます。
以下をご覧下さい。
あ
い
う
え
お
か
き
く
あ
い
き
く

相違点を含む行が連続している
このページのトップへ
連続した相違行を持つファイルを比較します。
通常だと・・・
C:¥sample>fc a.txt b.txt
ファイル a.txt と B.TXT を比較しています
***** a.txt
あ
い
う
え
お
か
き
***** B.TXT
あ
い
き
*****


C:¥sample>
上記のような結果になりますが、 /lb行数を指定した場合だと・・
C:¥sample>fc /lb3 a.txt b.txt
ファイル a.txt と B.TXT を比較しています
再同期に失敗しました。ファイルが著しく異なります。
***** a.txt
あ
い
う
***** B.TXT
あ
い
*****


C:¥sample>
fc/lb3を指定する事で、 相違を記憶する行数を3行に設定しました。
3行まで相違行が表示された後、 「再同期に失敗しました。ファイルが著しく異なります。」 というメッセージの表示と共に比較が停止します。
※ここでは掲載するスペースの関係上、極端に短い行数を設定しました。
このページのトップへ

では早速、fcの使用例を挙げてみたいと思います。
なお、基本的な使い方については既に説明をしてしまいましたので、上記にはない例を簡単にご紹介します。
fcの使用例
C:¥sample>fc /b a.txt b.txt
fc/bオプションを指定すると、 バイナリモードでの比較を行います。バイナリモードでは対象となる2つのファイルをバイト毎に比較します。
ここではa.txtb.txtを バイナリモードで比較しています。これらのファイルはテキストファイルですので、 何もオプションを指定しない場合はテキストモードで比較が行われます。
コマンドを実行すると以下のようになります。
fcの使用例
バイナリモードでの比較が行われ、相違点が表示されました。
なお、テキストモードでの比較は、相違点を発見後再同期しようと試みますが、 バイナリモードでは相違点が見つかると再度同期をとろうとせず、処理を終了してしまいます。
C:¥sample>fc /b a.txt b.txt
ファイル a.txt と B.TXT を比較しています
00000006: 0D 82
00000007: 0A A2
00000008: 82 0D
00000009: A4 0A
0000000A: 0D 82
0000000B: 0A A4
0000000D: A6 A4
00000011: A8 A6
00000012: 0D 82
00000013: 0A A6
00000014: 82 0D
00000015: A9 0A
00000016: 0D 82
00000017: 0A A8
00000019: AB A8
0000001D: AD A9
0000001E: 0D 82
0000001F: 0A A9
FC: B.TXT は a.txt より長いファイルです



C:¥sample>
このページのトップへ

次に、以下のような内容のテキストファイルを利用してfcでの比較を行います。
fcの使用例
fcsamp.txt

ファイルの属性を変更するコマンドはattribです。
ファイルをコピーするコマンドはcopyです。
ファイル   を削除するコマンドはdelです。 ←3文字分のスペース
ファイルの一覧表示をするコマンドはdirです。
ファイルの文字列検索をするのはfindです。
ファイルの文字列検索に正規表現を使えるのはfindstrです。
fcsamp2.txt

ファイルの属性を変更するコマンドはattribです。
ファイルをコピーするコマンドはcopyです。
ファイル	    を削除するコマンドはdelです。 ←タブによるスペース
ファイルの一覧表示をするコマンドはdirです。
ファイルの文字列検索をするのはfindです。
ファイルの文字列検索に正規表現を使えるのはfindstrです。
このページのトップへ
fcで、これらのファイルをオプションも何も指定せずに比較すると・・・
fcの使用例
このように、タブと3文字分のスペースが相違点として表示されました。
C:¥sample>fc fcsamp.txt fcsamp2.txt
ファイル fcsamp.txt と FCSAMP2.TXT を比較しています
***** fcsamp.txt
ファイルをコピーするコマンドはcopyです。
ファイル   を削除するコマンドはdelです。 ←相違点
ファイルの一覧表示をするコマンドはdirです。
***** FCSAMP2.TXT
ファイルをコピーするコマンドはcopyです。
ファイル            を削除するコマンドはdelです。←相違点
ファイルの一覧表示をするコマンドはdirです。
*****


C:¥sample>
このページのトップへ
では次に、オプション/wを指定してみます。
fcの使用例
C:¥sample>fc /w fcsamp.txt fcsamp2.txt
/wはタブやスペースなど、連続した空白を一つのスペースとして比較を行うオプションです。
実行してみると・・・
fcの使用例
/wによってテキスト内のタブやスペースが一つのスペースとみなされた為、 相違点は検出されませんでした。
C:¥sample>fc /w fcsamp.txt fcsamp2.txt
ファイル fcsamp.txt と FCSAMP2.TXT を比較しています
FC: 相違点は検出されませんでした


C:¥sample>
このページのトップへ

最後の例です。
今度はファイルセット(ディレクトリなど、複数のファイルの集合体)の比較をfcで行ってみます。
比較に用いるのは、a.txtと複数のファイルが入った fcディレクトリです。なお、fcでファイルセットを比較する際は、 必ずワイルドカードを指定しなくてはなりません。
fcディレクトリの中身は以下のようになります。
fcの使用例
C:¥sample>dir fc ←dirはディレクトリの内容を表示する
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 4CC2-05DF です

 C:¥sample¥fc のディレクトリ

2009/10/25  00:13    <DIR>          .
2009/10/25  00:13    <DIR>          ..
2009/10/24  21:39                32 a.txt
2009/10/24  20:17               649 fcsamp.exe
2009/10/24  23:55               276 fcsamp.txt
2009/10/24  20:18               651 fcsamp2.exe
2009/10/25  00:02               278 fcsamp2.txt
               5 個のファイル               1,886 バイト
               2 個のディレクトリ   3,013,644,288 バイトの空き領域

C:¥sample>
このページのトップへ
では比較してみます。
fcの使用例
C:¥sample>fc a.txt fc¥*.txt
a.txtfcディレクトリ内の全ての テキストファイルを比較します。
これを実行すると・・
fcの使用例
a.txtfcディレクトリ内の a.txtが比較され、相違点が表示されました。
C:¥sample>fc a.txt fc¥*.txt
ファイル a.txt と FC¥a.TXT を比較しています
***** a.txt
い
う
え
***** FC¥a.TXT
い
う
え
*****


C:¥sample>
このページのトップへ

fcの解説は以上となります。
少し説明にわかり難い(説明し難い)箇所もありましたが、 要は比較が行えれば良いので、余り細かく考える必要はないでしょう。
このfcは、 同じような内容だと思われるテキストファイルの中身の違いを調べたり、 またプログラムなどのソースコードの比較を行ったりするなど、 普段からそういった類のファイルをつかって作業を行う事が多い場合には 結構便利です。
※ファイルの変更を行う際、バックアップをとって変更したが、 後から見た時にどこを変更したのか、わからなくなった場合など・・
特にテキストモードでの比較などは、使い慣れると結構重宝するのではないでしょうか。
では、次回はまた実機のレビュー記事を掲載する予定ですが、
コマンド解説の方も少しずつ行っていきますので、どうぞよろしくお願い致します。
このページのトップへ
5分でわかる最新キーワード解説一覧
バイナリとは
セミナー一覧(現在、各企業で主催されているIT関連のセミナー)
サイト上の情報利用により生じた損害等には一切責任を持ちません
2010.01.04 Monday | 初心者でも簡単コマンドプロンプト | comments(0) | trackbacks(0) | 記事URL
▲PAGETOP
同カテゴリーの記事 最新5件
Comment:
Add a comment:











※コメントは管理者が承認後表示されます。
Trackback:
http://shop.denkaseihin.com/trackback/661
※記事と関連性が低い等、管理人が不適当と判断したものについては削除させて頂きます。
新着記事
CATEGORY
まめ知識
COMMENT
  • 巨大なサイズのファイルも一瞬で削除出来るコマンド del
    denkaseihin (04/15)
  • 巨大なサイズのファイルも一瞬で削除出来るコマンド del
    原田 (04/14)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    denkaseihin (09/18)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    ヨーイチ (09/18)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    denkaseihin (09/14)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    MN (09/13)
  • Firefoxでcookieが保存されないという現象が発生したら
    denkaseihin (10/28)
  • Firefoxでcookieが保存されないという現象が発生したら
    KEKE (10/27)
SMTWTFS
    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>
RSS
ARCHIVES
MOBILE
qrcode
LINK

Copyright © 2005 - denkaseihin. All Rights Reserved.