如何从命令行获取perforce根目录?

如何从命令行获取perforce根目录?,perforce,Perforce,如何从命令行获取perforce根目录?我已经尝试了p4 info,但我不希望为了从根本上解决这个问题而对其进行过滤。我肯定有办法,但我找不到 有没有一种方法可以以上下文敏感的方式获取根?例如,如果我有两个具有层次结构的工作区,如a/../script vs B/../script,我希望脚本返回a或B,具体取决于运行脚本的位置。如果希望在一个命令中运行客户端根目录: p4 -F %clientRoot% -ztag info 您需要使用2014.1更高版本的p4才能使用此标志。对于2014.

如何从命令行获取perforce根目录?我已经尝试了
p4 info
,但我不希望为了从根本上解决这个问题而对其进行过滤。我肯定有办法,但我找不到


有没有一种方法可以以上下文敏感的方式获取根?例如,如果我有两个具有层次结构的工作区,如a/../script vs B/../script,我希望脚本返回a或B,具体取决于运行脚本的位置。

如果希望在一个命令中运行客户端根目录:

p4 -F %clientRoot% -ztag info

您需要使用2014.1更高版本的p4才能使用此标志。

对于2014.1之前的旧版本,请使用以下命令

p4信息| grep'客户端根:'| cut-d'-f3-


根据OP的描述,他们可能想要。例如,如果客户端根目录是
/perforce/projects
,则

p4 where //depot/project-1/module-2

将给出
/performe/projects/project-1/module-2
。信贷来源。

这里的“perforce根目录”到底是什么?客户机的Root属性(可能存在于当前机器上,也可能不存在于当前机器上,因为它可能使用AltRoot,例如,用于跨平台客户机)?我认为@ChristopherCreutzig在这里是正确的。
p4 info
将解析为您当前的设置,而从工作区获取它将需要模拟Perforce如何处理AltRoot…我不确定
p4 info|grep'客户端root:“| cut-d”—f3-
的问题是您试图避免的。但我从未检查过,例如,
p4 info
是否本地化,如果没有,将来可能会改变。然后听起来你想要“p4 where//depot/A/B/C”。@BryanPendleton请将你的评论升级为答案。我认为,这个问题的大部分读者实际上都希望这样。另外,链接到将是有益的。它为我工作。您可能有较旧版本的P4客户端some1。您是对的。我已经更新了答案以澄清。如果环境中已经设置了“clientRoot”,则会中断。转义第二个百分号:
%clientRoot^%
。但因为CMD是特殊的,只有在提示下自己键入它时才有效。要在批处理文件中执行此操作,您必须说
%%clientRoot^^^%%
,这非常可怕。这很好,但出于好奇,您知道%clientRoot%变量是如何设置的吗?我用两个不同的根进行了测试,它们都在P4CONFIG.txt文件中设置了P4CLIENT,所以clientRoot可能是通过P4CLIENT设置的?@Matt…还有,-ztag参数的用途是什么?