WinMerge 自動化
はじめに
こんにちは!さいとうです。
今回は、複数のフォルダやファイルを比較する際に使用するWinMergeについて、記事を書いていこうと思います!!!
皆さんはWinMergeを使ったことはありますか?自分は普段の業務で、新旧のサーバーの環境変数を比較する際に使用しています。その際、エビデンスも残さないといけないので、それぞれの環境変数をWinMergeに張り付けた後、レポート生成、なんて作業を手動でやっています。。。
10回くらいなら手動で、、、と思っても、50回、100回、、となると気が狂いそうですよね。
そこで今回は、バッチファイル(Windows環境でコマンド実行できるテキストファイルのこと)を作って、ファイル比較を自動化してみました。
自動化する目的
- 今後もエビデンスを取ることがあるので、シンプルに作業を楽にするため。
- 日々ググるなかで、有益な情報を提供してくださるエンジニアさんに向けて、今度は私からその情報を還元するため。
さっそく自動化!!
自動化のイメージ!
- 自動化スタート!!
- バッチファイルをダブルクリック(バッチファイル起動)
- WinMergeがフォルダに格納してある2つをファイルを比較する
- 比較した結果をレポートとして生成する
- テキストファイル比較とレポート生成をn回繰り返す(今回は10回)
- レポートの結果がまとめて格納される
- おわり!!
なんとシンプルではないか。。?!
用意するもの
マシンとソフトウェア
- WindowsPC(コマンドプロンプトを使いたいからね)
- WinMerge
- 遊んでもいいフォルダ(自分はLocal Disk(C:)の配下に作りました~)
マストなもの
・比較したいテキストファイル(textfile01とtextfile02)
・テキストファイルを格納するためのフォルダ(ディレクトリ)(diff_test_1、diff_test_2、、)
・WinMerge自動化バッチファイル(autoWinmerge.bat)
以下はお好みで。
-
フォルダを複製するバッチファイル(make_dir.bat)
比較したいテキストファイル(textfile01とtextfile02)がフォルダに格納され、その後フォルダが10個複製される。本当はフォルダごとに異なるテキストファイルを格納して、フォルダごとで比較を実施したかったが、テキストファイルを作るのが面倒だったので、ダミー変数的なやつを作った。 -
フォルダを一括削除するバッチファイル(delete_dir.bat)
各フォルダの上位にフォルダtest
が存在しており、それを一括で削除する。for文を使って一回一回フォルダを消すようなコードを書くのが面倒だったので、一括で消せるようにしている。
ディレクトリのイメージ
C:\
├── temp
│ └── test
│ └── diff_test_1
│ └── diff_test_2
│ └── diff_test_3
│ └── ................
│ └── 20240212_diff_result
│ └── 20240213_diff_result
│ └── 20240214_diff_result
│ └── ......................
├── test_bat
│ ├── autoWinmarge
│ └── make_dir
│ └── delete_dir
│ └── textfile01.txt
│ └── textfile02.txt
-
make_dir
を起動すれば、test
とその配下にdiff_test_(xx)
が生成され、delete_dir
を起動すれば、test
が削除される仕組み。 -
autoWinmarge.bat
を起動する前はyyyymmdd_diff_result
(エビデンスを取得した日付が記載されたフォルダ)は生成されません。 -
autoWinmarge.bat
を起動した後は、yyyymmdd_diff_result
をtemp配下に生成する。
完成品
自動で差分を比較してくれるやつ(autoWinmarge.bat)
@echo off
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
mkdir C:\temp\%yyyy%%mm%%dd%_diff_result
timeout /t 3 /nobreak
:遅延環境変数の宣言
setlocal enabledelayedexpansion
set val = 1
set exe_winmerge=C:\Program Files\WinMerge\WinMergeU.exe
for /L %%n in (1,1,10) do (
set /a val += 1
set left_folder=C:\temp\test\diff_test_!val!\testfile01.txt
set right_folder=C:\temp\test\diff_test_!val!\testfile02.txt
start "" "%exe_winmerge%" !left_folder! !right_folder! /or C:\temp\%yyyy%%mm%%dd%_diff_result\diff_test_!val!.html /noninteractive
)
フォルダを複製するバッチファイル(make_dir.bat)
@echo off
:遅延環境変数の宣言
setlocal enabledelayedexpansion
set val = 1
for /L %%n in (1,1,10) do (
set /a val += 1
mkdir c:\temp\test\diff_test_!val!
copy C:\test_bat\*.txt c:\temp\test\diff_test_!val!
)
フォルダを一括削除するバッチファイル(delete_dir.bat)
@echo off
echo Y | rmdir /s c:\temp\test
おわりに
はじめての自動化で時間はかかりましたが、楽しかったです!
需要があればこのコードの解説とかも載せようと思います。
あと、バッチファイルではwhile文みたいなのが無いので、for文で仕方なく回数を設定しています。いい方法があれば是非コメントくださいね!(Zeenってコメントかけるのか知らんけど笑)
ではまた!
Discussion