WinMerge を『バッチファイル』で起動する方法を書きました。
バッチファイルでフォルダを指定しておいて、『ダブルクリック一発』で比較できるようにしました。
毎回ファイルやフォルダを指定する手間が省けて、とても快適になりました。
(追記)WinMerge の履歴を削除する方法も書きました。
WinMerge の履歴を削除する方法【最近使用したファイル】
WinMerge のマニュアル
WinMerge を呼び出すときに使用した引数のマニュアルです。
さて、自分がバッチファイルでやりたいことです。
- 2つのフォルダを、両方とも読み取り専用で開く。
- サブフォルダの中も再帰的に比較する。
あとは、WinMerge のヘルプを見て、目的に合った引数を選んでいきました。
(manual.winmerge.org) コマンドライン – WinMerge ヘルプ
- コマンドラインの書式
WinMergeU [/r] [/e] [/f filter] [/x] [/xq] [/s] [/ul] [/um] [/ur] [/u] [/wl] [/wm] [/wr] [/minimize] [/maximize] [/fl] [/fm] [/fr] [/dl leftdesc] [/dm middledesc] [/dr rightdesc] leftpath [middlepath] rightpath [/o outputpath] [/al] [/am] [/ar]
- WinMergeU
- WinMergeU.exe のファイルパス。
- /r
- フォルダの比較で、サブフォルダまで再帰的に比較する。(recursive compare)
- /wl
- 読み取り専用として、左側のアイテムを開く。
これで、WinMerge の左アイテムに RO(リードオンリー)と表示されました。
- /wr
- 読み取り専用として、右側のアイテムを開く。
これで、WinMerge の右アイテムに RO(リードオンリー)と表示されました。
- leftpath
- 左側で開く『フォルダ』や『ファイル』を指定する。
- rightpath
- 右側で開く『フォルダ』や『ファイル』を指定する。
コマンドラインのマニュアル
バッチファイルの中で使用したコマンドのマニュアルです。
- (docs.microsoft.com) コマンド ライン構文の記号 | Microsoft Docs
- 構文の説明で使われていた『カッコ記号』などの意味の説明です。
- (docs.microsoft.com) セット set | Microsoft Docs
- 構文は『
set [<Variable>=[<String>]]
』。バッチファイルの中で変数を使うために使用しました。
変数を使うときは、
%変数名%
のように、変数名をパーセント記号 (%) で囲むと参照できました。 - (docs.microsoft.com) スタート start | Microsoft Docs
- 構文は『
start ["<Title>"] [/d <Path>] [/i] [{/min | /max}] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/affinity <HexAffinity>] [/wait] [/elevate] [/b] [<Command> [<Parameter>... ] | <Program> [<Parameter>... ]]
』。WinMerge を起動するために使いました。
start
で起動すると、WinMerge の終了を待たずに処理が進みました。なので、WinMerge が起動した後に、バッチファイルが自動で終了してくれました。
ところで、日本語マニュアルは、ヘルプコマンド(help
または /?
)でも見ることができました。
コマンドプロンプトを起動して、『help set
』や『set /?
』を実行したら、set コマンドの日本語ヘルプが表示されました。
バッチファイル例
WinMerge を起動するバッチファイル例です。
set exe_file=C:\Program Files\WinMerge\WinMergeU.exe
set left_folder=F:\project\DATA-A
set right_folder=F:\project\DATA-B
start "" "%exe_file%" /r /wl /wr "%left_folder%" "%right_folder%"
ところで、start
コマンドの先頭の空文字列 ""
は何か?
start
コマンドのマニュアルによると、最初の空文字列 ""
は、コマンド プロンプト ウィンドウのタイトルバー (the Command Prompt window title bar) のタイトルを指定する場所でした。
けれども、GUI プログラムを起動するときに関しては、このタイトルに効果は無いようでした。
指定しても、WinMerge のウィンドウタイトルに、変化は無かったです。
なので、空文字列を指定しました。
あと、最初の空文字列 ""
を省略したら、WinMerge がうまく起動しませんでした。
おそらくですが、ほかの関係ない引数がタイトル扱いされてしまって、start
コマンドが期待した通りに動かなかったんだと思います。
実行結果
コマンドプロンプトの表示
バッチファイルを起動したときに表示された画面です。
コマンドプロンプトが一瞬だけ表示されて、すぐに消えました。
F:\project>set exe_file=C:\Program Files\WinMerge\WinMergeU.exe
F:\project>set left_folder=F:\project\DATA-A
F:\project>set right_folder=F:\project\DATA-B
F:\project>start "" "C:\Program Files\WinMerge\WinMergeU.exe" /r /wl /wr "F:\project\DATA-A" "F:\project\DATA-B"
このコマンドプロンプトの画面を出さないようにする方法です。
- バッチファイルへの『ショートカット』を作ります。
- ショートカットのプロパティで、『実行時の大きさ(R):』を『最小化』にします。
あとは、『ショートカット』から起動したら、コマンドプロンプトの画面が出なくなりました。
しかしこれでも、タスクバーには一瞬表示されましたが、そこは妥協しました。
タスクバーにも出さない方法です。
バッチファイルを使わずに、WinMergeU.exe のショートカットを使います。
- WinMergeU.exe のショートカットを用意して、プロパティを開きます。
- 『リンク先:(T):』に、オプションの引数やフォルダパスを追加します。
(追加例)
"C:\Program Files\WinMerge\WinMergeU.exe" /r /wl /wr "F:\project\DATA-A" "F:\project\DATA-B"
これで、コマンドプロンプトのウィンドウを出さずに、ダブルクリック一発でフォルダ比較ができるようになりました。
WinMerge の表示
バッチファイルでフォルダ比較をしたときの画面です。
フォルダ比較の画面
バッチファイルで指定した通りに、2つのフォルダが比較されました。
サブフォルダの中まで比較していて、ステータスバーに読み取り専用の RO も表示されています。
ファイル比較の画面
こちらも、ステータスバーに読み取り専用の RO が表示されました。
以上です。