1

Будучи полностью зеленым для Windows shell и 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:\release \ версии \ 1.0 \ component \ componentcode.cpp и выбрать его, откроется WinMerge и сравнится с C:\ dev \ component \ componentcode.cpp.

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

1 ответ1

1

Может быть, это поможет вам:

У меня есть скрипт для автоматического создания самораспаковывающихся архивов из отдельных файлов. Я добавил этот скрипт в контекстное меню по понятным причинам. Вы можете попробовать добавить в контекстное меню команду, которая вызывает скрипт, %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+.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .