knowledge ファイルを比較し、差分があるかどうかをチェックするサンプル

本記事では、2つのファイルを比較し、差分があるか否かをチェックするサンプルを紹介します。

なお、ファイル比較においては、以下の2つの観点があります。
1. ファイルの差分があるかどうかだけ分かればよく、どこに差分があるかまではチェックしなくていい
2. ファイルの差分があった場合は、どこに差分があるかまで見たい

上記のそれぞれの観点について、サンプルを紹介します。

■1. ファイルの差分があるかどうかだけ分かればよく、どこに差分があるかまではチェックしなくていい場合
こちらの場合は、AutoMateのアクションのみでチェック可能です。
具体的には、「ファイル システム - ファイル チェックサムの取得」によりファイルごとのハッシュ値を取得し、ハッシュ値を比較することで差分の有無を確認します。
※なお、ファイル内容そのものを「ファイル システム - ファイルからの読込み」で取得し、変数同士を比較する方法は考えないものとします。
※変数の内容が大きくなりタスク稼働に影響を及ぼす可能性がある、バイナリ ファイルは比較できないなどの理由です
(処理一例)

<!--変数宣言-->
<AMVARIABLE NAME="var_file1" DESCRIPTION="比較対象ファイル1" VALUE="" />
<AMVARIABLE NAME="var_file2" DESCRIPTION="比較対象ファイル2" />
<AMVARIABLE NAME="var_fileChecksum1" DESCRIPTION="ファイル1のチェックサム" />
<AMVARIABLE NAME="var_fileChecksum2" DESCRIPTION="ファイル2のチェックサム" />
<AMVARIABLE NAME="var_result" VALUE="不一致" DESCRIPTION="比較結果" />
<!--ファイル選択-->
<AMSHOWDIALOG ACTIVITY="open" WINDOWTITLE="比較対象ファイル1を選択してください" RESULTVARIABLE="var_file1" />
<AMSHOWDIALOG ACTIVITY="open" WINDOWTITLE="比較対象ファイル2を選択してください" RESULTVARIABLE="var_file2" />
<!--それぞれのファイルのチェックサムを取得-->
<AMFILESYSTEM ACTIVITY="get_checksum" FILE="%var_file1%" RESULTVARIABLE="var_fileChecksum1" />
<AMFILESYSTEM ACTIVITY="get_checksum" FILE="%var_file2%" RESULTVARIABLE="var_fileChecksum2" />
<!--チェックサムを比較し、一致していれば変数の内容を変更-->
<AMIF EXPRESSION="%var_fileChecksum1% = %var_fileChecksum2%" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_result" VALUE="一致" />
<AMELSE />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_result" VALUE="不一致" />
<AMIF ACTIVITY="end" />
<!--結果表示-->
<AMSHOWDIALOG>ファイル1:
%var_file1%
ファイル2:
%var_file2%
を比較した結果は「%var_result%」です。

ファイル1のハッシュ値:
%var_fileChecksum1%
ファイル2のハッシュ値:
%var_fileChecksum2%</AMSHOWDIALOG>

■2. ファイルの差分があった場合は、どこに差分があるかまで見たい場合
この場合、AutoMateのアクションだけでは比較が出来ない為、WindowsのDOSコマンドとあわせて利用する必要があります。
具体的には、Windowsの「fc」コマンドを利用します。
FCコマンド詳細はこちらのMicrosoftのページをご参照ください。
(処理一例)

<!--変数宣言-->
<AMVARIABLE NAME="var_file1" DESCRIPTION="比較対象ファイル1" VALUE="" />
<AMVARIABLE NAME="var_file2" DESCRIPTION="比較対象ファイル2" />
<AMVARIABLE NAME="var_result" DESCRIPTION="比較結果" />
<!--ファイル選択-->
<AMSHOWDIALOG ACTIVITY="open" WINDOWTITLE="比較対象ファイル1を選択してください" RESULTVARIABLE="var_file1" />
<AMSHOWDIALOG ACTIVITY="open" WINDOWTITLE="比較対象ファイル2を選択してください" RESULTVARIABLE="var_file2" />
<!--FCコマンドを実行-->
<AMRUN FILE="fc /n &quot;%var_file1%&quot; &quot;%var_file2%&quot;" WAITFOREND="YES" DOS="YES" OUTPUTVARIABLE="var_result" />
<!--結果表示-->
<AMSHOWDIALOG>ファイル1:
%var_file1%
ファイル2:
%var_file2%


結果
%var_result%</AMSHOWDIALOG>