[サイトTop] [As/R Top] [ヘルプTop] [戻る]
ケーススタディ、こんな時どうする?WinMergeを使ってファイルやフォルダーの比較(改良版)As/Rでもちょっこっと載せてるのですが、画面分割した状態でタイムスタンプやサイズを比較するモードがあります。残念ながら、タイムスタンプと、サイズしか比較しないので、タイムスタンプが信用できなかったり、サイズが一致する場合に見分けが付きません。 そらもー、どうしようもないくらいに当たり前なんですが、意外とバージョン管理とかやってるとあると困ることが多々あります。 例えば if (x == 0)修正前 ↓ if (x != 0)修正後 こんな風に修正したとしましょう。 ほら、ファイルサイズが変わらないのです。 しかもバージョン管理ソフトによって、サーバーなどから取得した時刻がタイムスタンプになっちゃうので、タイムスタンプ日付も当てになりません。 これを厳密に行う方法として、WinMergeというファイルのハッシュ値を用いて比較を行う、専用のツールと連携する方法を考えます。 WinMergeとはWinMergeはテキスト系ファイルの差分比較と、マージの機能を持つフリーウェアです。2~3つのファイルや、2つのフォルダーを比較ですることが可能であり、Windows系のファイル比較ソフトの代名詞といって良いでしょう。 機能拡張するとEXCELファイルなどのバイナリファイルの比較もできるようになります。 Ver.2系は今もメンテナンスされていますが、Ver.3系が2011年から開発ストップしているのがいささか不安です。 公式サイトhttp://winmerge.org/ 日本語版サイトhttps://winmergejp.bitbucket.io/ スクリプトの作成この手の外部コマンドの紹介も3回目なので、手抜きでいきなりスクリプトファイルを書いてしまいます。スクリプト内に細かく解説を入れているので、あーこんなもんかとコピペして使っていただければと思います。 これを「ランチャーバー」や「お気に入りバー」とかに置くなり、IDを割り振ってツールバーやキー割り当てしたりしてください。 画面分割しているとフォルダー、表示しているフォルダーの比較になります。 画面分割していない状態だと、リストで選択しているアイテムの比較になります。 //現在、開いているパスをWinMergeを用いて比較するスクリプト //画面分割している場合はそれぞれのパスの比較、画面分割していない場合はリストの選択数が1~3の場合はパラメータとして渡す // //※補足 //WinMeageのインストールパスを3箇所に書いているのは、D&Dでフォルダを渡された時のためにRunを使いたかったからです。 //(Runは変数展開できないが、ランチャーなどにスクリプトを置いた場合にD&Dでのファイル連携の対象になる) //変数定義で分かりやすく書くなら、Shellコマンドに置き換えても良いでしょう CheckGrammar=1 //アイコン画像を明示的に指定 icon=%ProgramFiles%\WinMerge\WinMergeU.exe //作業用変数 var $SelectText$ //1画面モード if ?State:DivisionWindow? == 0 //選択数が0なら現在のパスを渡す if ?SelectedCount? <= 0 $SelectText$=?NowDir? endif //選択数3より大きいなら現在のパスだけ渡す、エラーにしてもいいかも if ?SelectedCount? > 3 $SelectText$=?NowDir? endif //選択数が1~3なら値を渡す if ?SelectedCount? >= 1 if ?SelectedCount? <= 3 for //ファイルを記述する際に半角スペースを入れてくっつける $SelectText$ =& ?SelFile? next endif endif //動作確認するために、コマンドラインテキストをクリップボードにコピーする場合はこのコメントを消す //SetClipboardtext=$SelectText$ CommandLineOption = $SelectText$ SendInfoMode=0 ShiftSilentMode=0 BootDir= BootMode=0 OpenMode=0 Run=%ProgramFiles%\WinMerge\WinMergeU.exe exit endif //2画面モードの場合はパスを2個渡す CommandlineOption="?TargetDir?" ?NowDir? OpenMode=0 MultiCommandMode=0 ShiftSilentMode=0 BootDir= BootMode=0 Run=%ProgramFiles%\WinMerge\WinMergeU.exe |