Sendo completamente ecológico para o shell do Windows e scripts cmd, estou batendo a cabeça contra esse problema específico, mas não encontro nada.
O que pretendo fazer é adicionar um item de menu de contexto ao clicar com o botão direito em um arquivo para iniciar o WinMerge e compará-lo com esse arquivo em um diretório estático separado. Não importa se isso invoca um arquivo cmd específico que executa as operações para resolver os diretórios.
Por exemplo, temos um conjunto hipotético de diretórios e arquivos:
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
Clicar com o botão direito em C:\released\versions\1.0\component\componentcode.cpp e selecionar isto abrirá o WinMerge e compará-lo-á com C:\dev\component\componentcode.cpp
Podemos assumir que tudo \dev\ e \1.0\ em termos de estrutura é idêntico para todos os efeitos e propósitos. Obviamente, o comando de inicialização do WinMerge em si é trivial, mas estou tendo problemas para determinar os caminhos relativos aos arquivos dentro do diretório do código base.
Responder1
Talvez isso ajude você:
Eu tenho um script para criar zips auto-extraíveis automaticamente de arquivos únicos. Adicionei este script ao menu de contexto por motivos óbvios. O que você pode tentar é adicionar um comando ao menu de contexto que chama um script. %1
Na captura de tela está o caminho completo para o arquivo clicado com o botão direito, incluindo o nome do arquivo:
Em essência, crie uma nova chave reg em HKCR\*\shell e nomeie-a como quiser que apareça no menu de contexto. Crie uma nova chave chamada 'Command' e, para o valor padrão dessa chave, defina-a como o comando que você deseja chamar. No seu caso, você provavelmente deseja um script simples do PowerShell que receba o caminho como parâmetro e construa um novo caminho com base nele, e chame winMerge e passe esses dois caminhos. Powershell não é difícil de entender, algo como
param([String]$Path=$null)
$CodeDir = "C:\dev\component\"
$File1 = $Path
$File2 = "$CodeDir$(Get-ItemProperty $Path).Name"
Start-Process WinMerge.exe -Argumentlist "$File1 $File2"
Obviamente, há algumas otimizações que podem ocorrer lá, mas espero que você entenda o ponto. Não tenho o WinMerge, então não sei a sintaxe correta, mas este é o esboço do que precisa acontecer. Para chamar o seu script, você pode ver minha captura de tela e substituir o caminho do script pelo seu. Você precisará do PowerShell instalado, que é padrão no Vista +.