私は Windows シェルと cmd スクリプトについて全くの初心者なので、この特定の問題に頭を悩ませていますが、何も解決しません。
私が目指しているのは、ファイルを右クリックして WinMerge を起動し、別の静的ディレクトリにあるファイルと比較するためのコンテキスト メニュー項目を追加することです。これにより、ディレクトリを解決するための操作を実行する特定の cmd ファイルが呼び出されるかどうかは問題ではありません。
たとえば、次のようなディレクトリとファイルの仮想セットがあるとします。
C:\released\versions\1.0\lib\libcode.cpp
C:\released\versions\1.0\component\componentcode.cpp
C:\dev\lib\libcode.cpp
C:\dev\component\componentcode.cpp
C:\released\versions\1.0\component\componentcode.cpp を右クリックしてこれを選択すると、WinMerge が開き、C:\dev\component\componentcode.cpp と比較されます。
\dev\ と \1.0\ の構造は、すべての点で同一であると想定できます。WinMerge 自体の起動コマンドは簡単なのは明らかですが、ベース コード ディレクトリ内のファイルへの相対パスを決定するのに問題があります。
答え1
おそらくこれが役に立つでしょう:
単一のファイルから自己解凍型の zip を自動的に作成するスクリプトがあります。 明らかな理由から、このスクリプトをコンテキスト メニューに追加しました。 試すことができるのは、スクリプトを呼び出すコマンドをコンテキスト メニューに追加することです。 スクリーン%1
ショットでは、右クリックしたファイルへのフル パス (ファイル名を含む) が示されています。
要するに、HKCR\*\shell の下に新しいレジストリ キーを作成し、コンテキスト メニューに表示したい名前を任意の名前にします。その下に「コマンド」というラベルの付いた新しいキーを作成し、そのキーの既定値として、呼び出したいコマンドを設定します。この場合、おそらく、パスをパラメーターとして受け取り、それに基づいて新しいパスを構築し、winMerge を呼び出してその 2 つのパスを渡す単純な PowerShell スクリプトが必要になります。Powershell は習得が難しくありません。
param([String]$Path=$null)
$CodeDir = "C:\dev\component\"
$File1 = $Path
$File2 = "$CodeDir$(Get-ItemProperty $Path).Name"
Start-Process WinMerge.exe -Argumentlist "$File1 $File2"
明らかに、そこではいくつかの最適化が実行できますが、ポイントを理解していただければ幸いです。私は WinMerge を持っていないので、正しい構文はわかりませんが、必要なことの概要は次のとおりです。スクリプトを呼び出すには、私のスクリーンショットを見て、スクリプト パスを自分のものに置き換えてください。Vista+ に標準で付属している PowerShell がインストールされている必要があります。