gpt4 book ai didi

mercurial - hg extdiff -p 和 %~dp0

转载 作者:行者123 更新时间:2023-12-04 04:08:05 24 4
gpt4 key购买 nike

myprogram.cmd 在 PATH 中;

myprogram.cmd 使用 %~dp0 来确定它所在的文件夹;

我已将 @echo %~dp0 包含到 myprogram.cmd 中进行调试;

当我从任何地方调用 myprogram.cmd 时,它工作得很好,显示了 myprogram.cmd 所在的文件夹;

当我调用 hg extdiff -p myprogram.cmd 时,它不起作用,显示类似 c:\Users\Username\AppData\Local\Temp\extdiff.3n8op2\.

这里是hgrc文件的相关部分:

[extensions]
hgext.extdiff =

我做错了什么? %~dp0 不应该返回批处理文件的驱动器和路径吗?我用什么代替?我是否必须对 Mercurial 存储库应用一些特殊配置?将 myprogram.cmd 的完整路径传递给 hg extdiff -p 不是一个选项,除非它是自动完成的。

最佳答案

%~dp0 技巧是一个弥天大谎。它实际上并不是一个神奇的变量,它只是对 %0 的操作(或者你把 ~dp 放在前面的任何一个变量)。它只是获取该变量中的任何 string 并告诉您它的驱动器和路径组件是什么。如果该字符串只是一个像“myprogram”这样的名称,它表示“好吧,没有驱动器和路径的文件名被假定在当前目录中”。

所以 %~dp0 技巧只有在以下情况下才有效:

a) 您已经通过全名启动了您的脚本,或者b) 你正好在它所在的目录下

在这种情况下,您运行:

hg extdiff -p myprogram

变成以下对 Windows 的调用:

CreateProcess(NULL, "cmd.exe /c myprogram some diff args", ..., "c:/some/temp/path", ...)

这在道德上等同于打开一个 shell 并运行:

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

但请注意,这可能会因文件名中存在空格而混淆,您可能需要尝试使用引号。

关于mercurial - hg extdiff -p 和 %~dp0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com