Dado um arquivo, obter a localização em um diretório separado (identicamente estruturado)?

1

Sendo completamente verde para o shell do Windows e para o script cmd, estou batendo minha cabeça contra esse problema em particular, mas sem nada.

O que pretendo fazer é adicionar um item de menu de contexto para clicar com o botão direito do mouse em um arquivo para iniciar o WinMerge e compará-lo a 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.0\lib\libcode.cpp
C:\released\versions.0\component\componentcode.cpp
C:\dev\lib\libcode.cpp
C:\dev\component\componentcode.cpp

Clique com o botão direito em C: \ released \ versions \ 1.0 \ component \ componentcode.cpp e selecionando isso abrirá o WinMerge e o comparará com C: \ dev \ component \ componentcode.cpp

Podemos supor que tudo \ dev \ e \ 1.0 \ estrutura-wise é idêntico para todos os efeitos. 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 de base.

    
por C-Mart 05.06.2013 / 21:11

1 resposta

1

Talvez isso ajude você:

Eu tenho um script para criar automaticamente zips de extração automática de arquivos únicos. Eu adicionei este script ao menu de contexto por razões óbvias. O que você pode tentar é adicionar um comando ao menu de contexto que chama um script, o %1 na captura de tela é o caminho completo para o arquivo clicado com o botão direito, incluindo o nome do arquivo:

Essencialmente,crieumanovachaveregemHKCR\*\shellenomeie-aparaoquevocêdesejaqueapareçanomenudecontexto.Crieumanovachavesob"Comando" e, para o valor padrão dessa chave, defina-a como o comando que você deseja chamar. No seu caso, você provavelmente quer um simples script powershell que tome o caminho como um parâmetro e construa um novo caminho baseado nele e chame winMerge e passando por esses dois caminhos. Powershell não é difícil de pegar 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"

Há, obviamente, algumas otimizações que podem acontecer lá, mas esperamos que você entenda. Eu não tenho WinMerge, então eu não sei a sintaxe correta, mas este é o esboço do que precisa acontecer. Para chamar seu script, você pode olhar para a minha captura de tela e substituir o caminho do meu script pelo seu. Você precisará do PowerShell instalado, que vem como padrão no Vista +.

    
por 05.06.2013 / 21:41