Для данного файла получить местоположение в отдельном (идентично структурированном) каталоге?

Для данного файла получить местоположение в отдельном (идентично структурированном) каталоге?

Будучи совсем новичком в работе с оболочкой Windows и скриптами cmd, я бьюсь головой об эту конкретную проблему, но ничего не придумываю.

Я собираюсь добавить пункт контекстного меню для щелчка правой кнопкой мыши по файлу, чтобы запустить WinMerge и сравнить его с этим файлом в отдельном статическом каталоге. Не должно иметь значения, вызывает ли это определенный файл cmd, который затем выполняет операции по разрешению каталогов.

Например, у нас есть гипотетический набор каталогов и файлов:

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

Щелчок правой кнопкой мыши по C:\released\versions\1.0\component\componentcode.cpp и выбор этого файла откроет WinMerge и сравнит его с C:\dev\component\componentcode.cpp

Можно предположить, что все \dev\ и \1.0\ по структуре идентичны для всех намерений и целей. Очевидно, что команда запуска для WinMerge сама по себе тривиальна, но у меня возникли проблемы с определением относительных путей к файлам внутри базового каталога кода.

решение1

Возможно, это вам поможет:

У меня есть скрипт для автоматического создания самораспаковывающихся zip-архивов из отдельных файлов. Я добавил этот скрипт в контекстное меню по понятным причинам. Вы можете попробовать добавить в контекстное меню команду, которая вызывает скрипт, на %1снимке экрана указан полный путь к файлу, нажатому правой кнопкой мыши, включая имя файла:

введите описание изображения здесь

По сути, создайте новый ключ reg в HKCR\*\shell и назовите его так, как вы хотите, чтобы он отображался в контекстном меню. Создайте новый ключ под названием «Command» и установите для этого ключа значение по умолчанию, которое вы хотите вызвать. В вашем случае вам, вероятно, нужен простой скрипт powershell, который принимает путь в качестве параметра и создает новый путь на его основе, а также вызывает winMerge и передает эти два пути. Powershell несложно освоить, что-то вроде

param([String]$Path=$null)

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

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

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

Очевидно, что там можно провести некоторые оптимизации, но, надеюсь, вы поняли суть. У меня нет WinMerge, поэтому я не знаю правильный синтаксис, но это схема того, что должно произойти. Чтобы вызвать свой скрипт, вы можете посмотреть на мой скриншот и заменить мой путь к скрипту на свой, вам понадобится установленный powershell, который входит в стандартную комплектацию Vista+.

Связанный контент