Трюк% ~ dp0 большая ложь .На самом деле это не волшебная переменная, это просто манипуляция с% 0 (или с любой другой переменной, перед которой вы ставите ~ dp).Он просто принимает значение string в этой переменной и сообщает вам, каковы его компоненты диска и пути.Если эта строка является просто именем, подобным «myprogram», она говорит: «Ну, имена файлов без дисков и путей должны быть в текущем каталоге».
Так что трюк% ~ dp0 работает только в том случае, если либо:
а) вы запустили свой скрипт по его полному имени или б) вы оказались в каталоге, в котором он находится
В этом случае вы запускаете:
hg extdiff -p myprogram
превращается в следующий вызов Windows:
CreateProcess(NULL, "cmd.exe /c myprogram some diff args", ..., "c:/some/temp/path", ...)
, что морально эквивалентно открытию оболочки и запуску:
C:\>cd c:\some\temp\path
C:\some\temp\path>myprogram some diff args
%0 is myprogram
%~dp0 is C:\some\temp\path
Я рекомендую передать полное имя программы для вашего инструментанапример, через ваш .hgrc:
[extdiff]
myprogram=c:/tools/myprogram.cmd
Но будьте осторожны, это может привести к путанице из-за присутствия пробелов в вашем имени файла, возможно, вам придется поэкспериментировать с цитированием.