Dado un archivo, ¿obtener la ubicación en un directorio separado (estructurada de manera idéntica)?

Dado un archivo, ¿obtener la ubicación en un directorio separado (estructurada de manera idéntica)?

Al ser completamente ecológico para el shell de Windows y las secuencias de comandos cmd, me golpeo la cabeza con este problema en particular, pero no se me ocurre nada.

Lo que pretendo hacer es agregar un elemento del menú contextual al hacer clic derecho en un archivo para iniciar WinMerge y compararlo con ese archivo en un directorio estático separado. No debería importar si esto invoca un archivo cmd particular que luego realiza las operaciones para resolver los directorios.

Por ejemplo, tenemos un conjunto hipotético de directorios y archivos:

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

Al hacer clic derecho en C:\released\versions\1.0\component\componentcode.cpp y seleccionarlo, se abrirá WinMerge y se comparará con C:\dev\component\componentcode.cpp

Podemos asumir que todo \dev\ y \1.0\ en cuanto a estructura es idéntico para todos los efectos. Obviamente, el comando de inicio de WinMerge en sí es trivial, pero tengo problemas para determinar las rutas relativas a los archivos dentro del directorio del código base.

Respuesta1

Quizás esto te ayude:

Tengo un script para crear automáticamente archivos zip autoextraíbles a partir de archivos individuales. Agregué este script al menú contextual por razones obvias. Lo que puede intentar es agregar un comando al menú contextual que llame a un script; %1en la captura de pantalla se muestra la ruta completa al archivo en el que se hizo clic con el botón derecho, incluido el nombre del archivo:

ingrese la descripción de la imagen aquí

En esencia, cree una nueva clave de registro en HKCR\*\shell y asígnele el nombre que desee que aparezca en el menú contextual. Cree una nueva clave debajo denominada 'Comando' y, para el valor predeterminado de esa clave, configúrela en el comando que desea llamar. En su caso, probablemente desee un script de PowerShell simple que tome la ruta como parámetro y cree una nueva ruta basada en esa, llame a winMerge y pase esas dos rutas. Powershell no es difícil de aprender, algo así 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 hay algunas optimizaciones que podrían realizarse allí, pero espero que entiendas el punto. No tengo WinMerge, por lo que no conozco la sintaxis correcta, pero este es el resumen de lo que debe suceder. Para llamar a su secuencia de comandos, puede mirar mi captura de pantalla y reemplazar la ruta de mi secuencia de comandos con la suya; necesitará tener instalado PowerShell, que viene de serie en Vista+.

información relacionada