1 votes

Étant donné un fichier, obtenir l'emplacement dans un répertoire séparé (structuré de manière identique) ?

Étant complètement novice en matière de Windows Shell et de script cmd, je me cogne la tête contre ce problème particulier mais je n'arrive à rien.

Ce que je cherche à faire est d'ajouter un élément de menu contextuel au clic droit sur un fichier pour lancer WinMerge et le comparer à ce fichier dans un répertoire séparé et statique. Cela ne devrait pas avoir d'importance si cela invoque un fichier cmd particulier qui effectue ensuite les opérations pour résoudre les répertoires.

Par exemple, nous avons un ensemble hypothétique de répertoires et de fichiers :

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

En cliquant avec le bouton droit de la souris sur C:\released\versions\1.0\component\componentcode.cpp et en le sélectionnant, cela ouvrira WinMerge et le comparera à C:\dev\component\componentcode.cpp

Nous pouvons supposer que tout \dev\ y \1.0\ La structure est identique à toutes fins utiles. Évidemment, la commande de lancement de WinMerge elle-même est triviale, mais j'ai du mal à déterminer les chemins relatifs des fichiers dans le répertoire du code de base.

1voto

MDMoore313 Points 5492

Peut-être que cela vous aidera :

J'ai un script pour créer automatiquement des zips auto-extractibles à partir de fichiers uniques. J'ai ajouté ce script au menu contextuel pour des raisons évidentes. Ce que vous pouvez essayer est d'ajouter une commande au menu contextuel qui appelle un script, le %1 dans la capture d'écran est le chemin complet du fichier cliqué avec le bouton droit de la souris, y compris le nom du fichier :

enter image description here

En gros, créez une nouvelle clé reg sous HKCR\*. \<strkeep>Shell<strkeep> et donnez-lui le nom que vous voulez voir apparaître dans le menu contextuel. Créez une nouvelle clé intitulée "Commande" et attribuez à la valeur par défaut de cette clé la commande que vous souhaitez appeler. Dans votre cas, vous voulez probablement un simple script powershell qui prend le chemin comme paramètre et construit un nouveau chemin basé sur celui-ci, et appelle winMerge et passe dans ces deux chemins. Powershell n'est pas difficile à prendre en main, quelque chose comme

param([String]$Path=$null)

$CodeDir = "C:\dev\component\"

$File1 = $Path
$File2 = "$CodeDir$(Get-ItemProperty $Path).Name"

Start-Process WinMerge.exe -Argumentlist "$File1 $File2"

Il y a évidemment quelques optimisations qui pourraient avoir lieu ici mais j'espère que vous voyez le point. Je n'ai pas WinMerge donc je ne connais pas la syntaxe correcte, mais c'est le contour de ce qui doit avoir lieu. Pour appeler votre script vous pouvez regarder ma capture d'écran et remplacer mon script chemin avec le vôtre, vous aurez besoin de powershell installé qui est livré en standard sur Vista +.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X