本記事では、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 "%var_file1%" "%var_file2%"" WAITFOREND="YES" DOS="YES" OUTPUTVARIABLE="var_result" /> <!--結果表示--> <AMSHOWDIALOG>ファイル1: %var_file1% ファイル2: %var_file2% 結果 %var_result%</AMSHOWDIALOG>