WinMergeをコマンドラインから利用する。

WinMergeは各種のツールと連携ができるようにコマンドラインインタフェースを備えています。今回は、コマンドラインインタフェースを使用してVisualSourceSafeから最新を取得したフォルダとチェックイン前のローカルの作業フォルダを渡して比較する例を記載してみます。


Dim args As String = String.Empty
args = " /r /u /wl /wr /dl ""{0}"" /dr ""{1}"" ""{2}"" ""{3}"" "
args = String.Format(args, "VSS(VisualSourceSafe上のファイル)", "Local(編集中のファイル)", _leftPath, _rightPath)
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(WIN_MERGE_PATH, args)

指定しているオプションは、「サブフォルダを再帰的に比較」「ファイルを最近追加したリスト(MRU)に追加しない」「左側を読取専用」「右側を読取専用」「左側のタイトルを"VSS(VisualSourceSafe上のファイル)"」「右側のタイトルを"Local(編集中のファイル)"」に設定しています。コマンドラインの末尾の_leftPathと_rightPathには比較するフォルダのパス名を指定します。上記のオプションでWinMergeを起動すると以下のように表示されます。


以下は、WinMergeのヘルプの引用です。様々な事が出来るようなので参考にどうぞ。

コマンドライン

                                                                                                                                                              • -

WinMergeコマンドラインは、比較するパスに加えいくつかのパラメータを受け付けます。 これらのパラメータのほとんどは、外部比較ツールとして使用したり、バッチファイルから比較操作を 開始できるようにすることを目的としています。

WinMergeコマンドラインから実行するには以下の書式のうちの1つを使用します:

WinMerge[U] [/?]

WinMerge[U] [/r] [/e] [/f filter] [/x] [/s] [/ul] [/ur] [/um] [/u] [/wl] [/wr] [/wm] [/minimize] [/maximize] [/dl leftdesc] [/dr rightdesc] leftpath [middlepath] rightpath [/o outputpath]

WinMerge[U] conflictfile

コマンドには2つの形式があります:

WinMergeU
もし、Unicode版のWinMergeを実行しているならば、WinMergeU を使用してください。Unicode版のWinMergeは最近のWindowsにインストールされます。

WinMerge
もし、ANSI版のWinMergeを実行しているならば、WinMerge を使用してください。ANSI版のWinMergeWindows 9xや WMEにインストールされます。

パラメータなしかパス名を入力すると単にWinMergeウインドウを開きます。 パラメータは、スラッシュ( / ) か、ダッシュ ( - ) 文字が 前に付加されます。パス名にはプリフィックス文字を付加しません。

/? このトピックのWinMergeヘルプを開きます。

/r すべてのサブフォルダ内のすべてのファイルを比較します(再帰比較)。 ユニークフォルダ (片方のみ存在するフォルダ)は、分離された項目として比較結果内にリストされます。 サブフォルダまで含めるとかなり比較時間が増大してしまうことに注意してください。 このパラメータを指定しなかった場合、WinMergeは比較するフォルダ内のファイルとトップレベルのサブフォルダのみリストします。 サブフォルダの中までは比較しません。

/e EscキーでWinMergeが閉じるようにします。 WinMergeを外部比較アプリケーションとして使用する場合に便利です。 (ダイアログのようにすばやくWinMergeを閉じることができます) この引数を指定しなかった場合、すべてのウインドウを閉じるのに何回もEscキーを 押さなければならないことになるかもしれません。

/f 比較を制限するために、指定したフィルタを適用します。 フィルタは*.h *.cppのようなファイルマスクか、 XML/HTML Develのようなファイルフィルタの名前です。 スペースを含むフィルタマスクやフィルタ名はダブルクォーテーションマークで括ってください。

/x 同一ファイルの比較をしたときにWinMergeを閉じます。 (情報ダイアログを表示した後) このパラメータは比較後に効果がなくなります。 例えば、もしファイルがマージか編集の結果として同一となった場合です。 このパラメータは、WinMergeを外部アプリケーションとして使用したり、 差異のないファイルを無視することによって余分なステップを取り除きたい場合に便利です。

/s WinMergeウインドウを1つのインスタンスに制限します。 例えば、WinMergeが既に実行中ならば、新しい比較は同じインスタンス内で実行されます。 この引数を指定しなかった場合、複数のウインドウが開かれる可能性があります: 設定によっては、新しい比較が既に存在するウインドウで実行されることも新しいウインドウで 実行されることもあります。

/ul 左側パスが最近使用した項目(MRU)リストに追加されるのを防ぎます。 外部アプリケーションは、ファイルまたはフォルダの選択ダイアログのMRUリストにパスを 追加するべきではありません。

/ur 右側パスが最近使用した項目(MRU)リストに追加されるのを防ぎます。 外部アプリケーションは、ファイルまたはフォルダの選択ダイアログのMRUリストにパスを 追加するべきではありません。

/um 中央のパスが最近使用した項目(MRU)リストに追加されるのを防ぎます。 外部アプリケーションは、ファイルまたはフォルダの選択ダイアログのMRUリストにパスを 追加するべきではありません。

/u (または/ub) 各々(左、右、中央)のパスが最近使用した項目(MRU)リストに追加されるのを防ぎます。 外部アプリケーションは、ファイルまたはフォルダの選択ダイアログのMRUリストにパスを 追加するべきではありません。

/wl 読み取り専用として左側を開きます。 比較時、左側を変更したくない場合に使用してください。

/wr 読み取り専用として右側を開きます。 比較時、右側を変更したくない場合に使用してください。

/wr 読み取り専用として中央を開きます。 比較時、中央を変更したくない場合に使用してください。

/minimize 最小化状態でWinMergeを開始します。 このオプションは長時間かかる比較を行う場合に便利です。

/maximize 最大化状態でWinMergeを開始します。

/dl 左側タイトルバーの説明を指定します。 デフォルトのフォルダやファイル名テキストに上書きされます。例: /dl "Version 1.0" や /dl WorkingCopy. スペースを含む説明はダブルクォーテーションマークで括ってください。

/dr /dlと同様に右側タイトルバーの説明を指定します。

/dm /dlと同様に中央タイトルバーの説明を指定します。

leftpath 左側で開くフォルダやファイルを指定します。

middle 中央で開くフォルダやファイルを指定します。

right 右側で開くフォルダやファイルを指定します。

WinMergeは、ファイルとフォルダを比較できません。そのためパスパラメータ両方 (leftpath と rightpath) には、同じ種類(フォルダかファイルのどちらか) を指し差なければなりません。 もし、WinMergeが指定したパスのどちらかを見つけることができなければ、 ファイルまたはフォルダ選択ダイアログを開きます。 ファイルまたはフォルダ選択ダイアログでは、正しいパスを選択できます。

ティップ
ファイル比較では、パスパラメータの一つとしてフォルダ名を指定できます。 ただし、フォルダは他方のファイル名と同じファイルを含んでいる必要があります。

例えば、以下のコマンドを考えます:

WinMergeU C:\Folder\File.txt C:\Folder2

もし、C:\Folder2が ファイル名File.txtを含んでいれば、 WinMergeは、暗黙的にファイル指定として第二のパスを解決します。 当然ながら、C:\Folder2がファイル名 File.txtを含んでいなければ、コマンドは不正とみなされます。

outputpath マージした結果のファイルを保存するオプションの出力フォルダを指定します。

出力パスはコマンドラインからWinMergeを開始する時まれにしか必要となりません。 それはバージョンコントロールツールとともに使用されることになります。 結果ファイルとして出力パスを指定する必要があるかもしれません。 もし、出力パスを指定したら、WinMergeはファイル比較ウインドウで2つのファイルのみ を表示します。しかしながら、もしそれらのファイルのいずれかを保存したならば、 それは出力パスに書かれ、2つの元ファイルは前の状態のままになります。

バージョンコントロールシステムは一般的にtheirsや mine、mergedかまたはresolved のような用語を使用し元と結果ファイルを参照します。 もし、WinMergeコマンドラインに出力パスを指定し、バージョンコントロールシステムと連携するならば、 この順番でファイルを並べるべきです。

conflictfile コンフリクトファイルを指定します。 コンフリクトファイルは通常バージョンコントロールシステムによって生成されます。 コンフリクトファイルはファイル比較ウインドウで開かれ、 「コンフリクトファイルの解決」で説明している様にマージやコンフリクトを解決することができます。 コンフリクトファイルと共に他のパスは使用できないことに注意してください。