Bei einer gegebenen Datei den Speicherort in einem separaten (identisch strukturierten) Verzeichnis abrufen?

Bei einer gegebenen Datei den Speicherort in einem separaten (identisch strukturierten) Verzeichnis abrufen?

Da ich mit Windows-Shell und cmd-Scripting überhaupt nicht vertraut bin, zerbreche ich mir den Kopf über dieses spezielle Problem, aber mir fällt nichts ein.

Mein Ziel ist es, ein Kontextmenüelement hinzuzufügen, das es ermöglicht, WinMerge zu starten und es mit der Datei in einem separaten, statischen Verzeichnis zu vergleichen, wenn man mit der rechten Maustaste auf eine Datei klickt. Dabei sollte es keine Rolle spielen, ob dadurch eine bestimmte Cmd-Datei aufgerufen wird, die dann die Vorgänge zum Auflösen der Verzeichnisse ausführt.

Beispielsweise haben wir einen hypothetischen Satz von Verzeichnissen und Dateien:

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

Klicken Sie mit der rechten Maustaste auf C:\released\versions\1.0\component\componentcode.cpp und wählen Sie dies aus. WinMerge wird geöffnet und mit C:\dev\component\componentcode.cpp verglichen.

Wir können davon ausgehen, dass \dev\ und \1.0\ strukturell im Grunde identisch sind. Natürlich ist der Startbefehl für WinMerge selbst trivial, aber ich habe Probleme, die relativen Pfade zu Dateien im Basiscodeverzeichnis zu ermitteln.

Antwort1

Vielleicht hilft dir das:

Ich habe ein Skript, um automatisch selbstextrahierende Zip-Dateien aus einzelnen Dateien zu erstellen. Ich habe dieses Skript aus offensichtlichen Gründen zum Kontextmenü hinzugefügt. Sie können versuchen, dem Kontextmenü einen Befehl hinzuzufügen, der ein Skript aufruft. %1Im Screenshot ist der vollständige Pfad zur mit der rechten Maustaste angeklickten Datei, einschließlich des Dateinamens:

Bildbeschreibung hier eingeben

Erstellen Sie im Wesentlichen einen neuen Registrierungsschlüssel unter HKCR\*\shell und benennen Sie ihn mit dem Namen, der im Kontextmenü angezeigt werden soll. Erstellen Sie darunter einen neuen Schlüssel mit der Bezeichnung „Command“ und legen Sie als Standardwert für diesen Schlüssel den Befehl fest, den Sie aufrufen möchten. In Ihrem Fall möchten Sie wahrscheinlich ein einfaches Powershell-Skript, das den Pfad als Parameter übernimmt, einen neuen Pfad basierend auf diesem erstellt und winMerge aufruft und diese beiden Pfade übergibt. Powershell ist nicht schwer zu erlernen. So etwas wie

param([String]$Path=$null)

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

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

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

Natürlich könnten hier einige Optimierungen vorgenommen werden, aber ich hoffe, Sie verstehen, worauf ich hinaus will. Ich habe kein WinMerge, daher kenne ich die korrekte Syntax nicht, aber hier ist die Übersicht dessen, was vorgenommen werden muss. Um Ihr Skript aufzurufen, können Sie sich meinen Screenshot ansehen und meinen Skriptpfad durch Ihren ersetzen. Sie müssen Powershell installiert haben, das bei Vista+ standardmäßig enthalten ist.

verwandte Informationen