Dado um arquivo, obtenha o local em um diretório separado (estruturado de forma idêntica)?

Dado um arquivo, obtenha o local em um diretório separado (estruturado de forma idêntica)?

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. %1Na captura de tela está o caminho completo para o arquivo clicado com o botão direito, incluindo o nome do arquivo:

insira a descrição da imagem aqui

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 +.

informação relacionada