【问题标题】:How can I retrieve the P4 ROOT variable value in a Windows Batch file?如何在 Windows 批处理文件中检索 P4 ROOT 变量值?
【发布时间】:2014-12-12 19:41:12
【问题描述】:

我想检索出现在 p4 信息中的 p4 CLIENT ROOT 变量,但不确定如何检索。我自己是批处理脚本的新手。我查看了http://answers.perforce.com/articles/KB_Article/Accessing-Perforce-Environment-Variables-From-a-Windows-Batch-File,但我将 CLIENT 更改为 ROOT 但它似乎不起作用。

编辑: 我找到了一种使该教程中的命令正常工作的方法,但这违背了我想要实现的目的,因为我必须在命令行中手动设置 P4ROOT。相反,我假设我不知道根文件夹,所以我想以某种方式从 p4 信息中找到它。

【问题讨论】:

  • Perforce 是一个客户端-服务器系统,客户端根与服务器根不同(通常,客户端和服务器甚至不在同一台机器上)。 P4ROOT 是服务器根目录,但您的问题似乎是关于检索客户端根目录。您是否正在编写由服务器运行的触发器?或者您正在构建客户端工具?确定您需要客户端根还是服务器根是确定如何继续的关键。

标签: windows batch-file command-line environment-variables perforce


【解决方案1】:

您可以解析p4 set P4CLIENT 的输出以获取客户端名称,然后解析p4 client clientname 的输出以获取根。丑陋但实用:

@for /f "tokens=2 delims== " %c in ('p4 set P4CLIENT') do @(for /f "tokens=2" %r in ('p4 client -o %c ^| findstr /c:"Root:" ^| findstr /v #') do echo %r)

如果您在批处理文件中使用它,请将每个百分号加倍。

编辑 - 交替,而且更容易,现在我看到了:

for /f "tokens=3" %r in ('p4 info ^| findstr /c:"Client root:"') do echo %r

同样,如果您在批处理文件中使用它,则将百分比加倍。

【讨论】:

  • 如果可以,最好能解释一下 for 循环中每个位的作用:)
【解决方案2】:

正如 Bryan 所指出的,客户端根目录和服务器根目录是两个不同的东西,最好弄清楚你想要获取的是哪一个(听起来你想获取当前的客户端根目录)客户端;这是在客户端规范中设置的,不是在客户端或服务器端的任何环境变量中)。不过,您可以从“p4 info”的输出中获取它们,并且可以使用 p4 的 -F 全局选项以最小的麻烦隔离任一字段:

客户端根目录:

p4 -Ztag -F %clientRoot% info

服务器根目录:

p4 -Ztag -F %serverRoot% info

有关 -F 选项的更多信息,请参阅http://www.perforce.com/blog/130826/fun-formatting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2011-07-07
    相关资源
    最近更新 更多