NonSoft

コマンドライン(バッチ)でファイル比較する方法


 ち〜な〜み〜に〜

フォルダ内のファイルが更新された際の差分(更新ファイル一覧)を定期的に出力するツールを紹介します。
定期的とはタイマ・スケジューラ等で実行できるコマンドライン(バッチ)対応である事を意味します。

紹介するツールは「フォルダ内のファイル比較ツール」と「テキスト差分表示ツール」です。
これらのツールはコマンドライン(バッチ)に対応し比較結果をエクセル形式、CSV形式、HTML形式で出力できるツールです。

コマンドライン対応のファイル比較ツールと言えばfcやcompを思い出しますが、
fcやcompでは思い通りの結果を出力する事は出来ないと思います。

出力結果(HTML形式)イメージをご覧頂ければ、その違いに納得して頂けると思います。


以下にコマンドラインの指定方法とHTML形式で出力したイメージを記述します。

★コマンドライン(バッチ)でフォルダ比較(ファイル差分)する方法
以下のバッチファイルは「フォルダ内のファイル比較ツール」を使用しています。

REM ------------------------------------------------------------------------------------------------
REM コマンドライン(バッチ)でフォルダ比較(ファイル差分)する方法
REM ※[表示内容保存と同時に個別ファイル(差分)を出力する]をチェックして比較結果出力を行なうと、
REM ※変更があった個々のファイルのテキスト差分解析結果も同時に出力されます。
REM ------------------------------------------------------------------------------------------------

REM 起動後にフォルダ比較結果を画面表示(差分のみ、データ比較は前回指定した値を採用)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02"

REM バッチでフォルダ比較結果出力(エクセル形式)、差分のみ(FALSE)、データ比較(FALSE)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -E"D:\Temp\Folder11.xls" -NF -DF

REM バッチでフォルダ比較結果出力(エクセル形式)、差分のみ(TRUE)、データ比較(TRUE)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -E"D:\Temp\Folder12.xls" -NT -DT

REM バッチでフォルダ比較結果出力(CSV形式(カンマ区切))、表示対象パス等(sub\*,*.c)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -C"D:\Temp\Folder21.csv" -PT"sub\*,*.c"

REM バッチでフォルダ比較結果出力(CSV形式(タブ区切))、表示非対象パス等(sub\*,*.c)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -C"D:\Temp\Folder22.txt" -STAB -PF"sub\*,*.c"

REM バッチでフォルダ比較結果出力(CSV形式(任意文字列))、差分が無い時は出力しない
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -C"D:\Temp\Folder23.txt" -S"<SEPA>" -X

REM バッチでフォルダ比較結果出力(HTML形式)、表示対象パス等(sub\*)、表示非対象パス等(*.c)
FdateCompare "D:\Temp\Folder01" "D:\Temp\Folder02" -H"D:\Temp\Folder31.html" -PT"sub\*" -PF"*.c"

フォルダ比較結果出力例(HTML形式)
No.状態フォルダ1フォルダ2ファイル/フォルダの相対パス
1 2010/05/26 12:32:012010/05/06 16:21:00aaa\
2 2010/05/06 16:17:532010/05/06 16:18:13aaa\bbb\
3 2010/05/06 16:17:532010/05/06 16:18:13aaa\bbb\ccc\
4削除2010/05/26 12:32:01 aaa\xかきく.ini
5追加 2010/05/06 16:21:00aaa\かきく.ini
6変更2010/05/26 12:32:012010/06/10 09:31:14Abc.txt
7 2010/05/26 12:32:012010/05/06 16:21:00b.txt
8 2010/05/26 12:32:012010/05/06 16:21:00bbb\
9 2010/05/26 12:32:012010/05/06 16:21:00bbb\ccc\
10 2010/05/26 12:32:012010/05/06 16:21:00bbb\ccc\euc.f

★コマンドライン(バッチ)でファイル比較(テキスト差分)する方法
以下のバッチファイルは「テキスト差分表示ツール」を使用しています。

REM ------------------------------------------------------------------------------------------------
REM コマンドライン(バッチ)でファイル比較(テキスト差分)する方法
REM ------------------------------------------------------------------------------------------------

REM 起動後にファイル比較結果を画面表示、文字コード指定(自動判定と自動判定)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt"

REM バッチでファイル比較結果出力(エクセル形式)、文字コード指定(自動判定と自動判定)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -E"D:\Temp\Test11.xls"

REM バッチでファイル比較結果出力(エクセル形式)、文字コード指定(SJISとUTF8)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -E"D:\Temp\Test12.xls" -M1SJIS -M2UTF8

REM バッチでファイル比較結果出力(エクセル形式)、文字コード指定(UNICODEとEUC)、差分のみ
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -E"D:\Temp\Test13.xls" -M1UNICODE -M2EUC -N

REM バッチでファイル比較結果出力(エクセル形式)、文字コード指定(BINとBIN)、差分が無い時は出力しない
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -E"D:\Temp\Test14.xls" -M1BIN -M2BIN -X

REM バッチでファイル比較結果出力(CSV形式(カンマ区切))、文字コード指定(自動判定と自動判定)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -C"D:\Temp\Test21.csv"

REM バッチでファイル比較結果出力(CSV形式(カンマ区切))、文字コード指定(UNICODEとEUC)、差分のみ
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -C"D:\Temp\Test22.csv" -M1UNICODE -M2EUC -N

REM バッチでファイル比較結果出力(CSV形式(タブ区切))、文字コード指定(JISとUTF7)、差分のみ
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -C"D:\Temp\Test23.txt" -M1JIS -M2UTF7 -N -STAB

REM バッチでファイル比較結果出力(CSV形式(任意文字列))、文字コード指定(BINとBIN)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -C"D:\Temp\Test24.txt" -M1BIN -M2BIN -S"<SEPA>"

REM バッチでファイル比較結果出力(HTML形式)、文字コード指定(自動判定と自動判定)
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -H"D:\Temp\Test31.html"

REM バッチでファイル比較結果出力(HTML形式)、文字コード指定(SJISとUTF8)、差分が無い時は出力しない
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -H"D:\Temp\Test32.html" -M1SJIS -M2UTF8 -X

REM バッチでファイル比較結果出力(HTML形式)、文字コード指定(UNICODEとEUC)、差分のみ
TextDiffDsp "D:\Temp\Test01.txt" "D:\Temp\Test02.txt" -H"D:\Temp\Test33.html" -M1UNICODE -M2EUC -N

ファイル比較結果出力例(HTML形式)
No.状態行No.ファイル1ファイル2行No.
1 1あいうえおあいうえお1
2変更2kakikukekoかきくけこ2
3 3さしすせそさしすせそ3
4変更4たち てとたちつてと4
5追加  なにぬねの5
6 5はひふへほはひふへほ6
7 6まみむめもまみむめも7
8削除7やいゆえよ  
9 8らりるれろらりるれろ8
10 9わいうえおわいうえお9