perforce命令的结果到命令行变量

Results of perforce command to command line variable

我在批处理文件中工作,我有一个 Perforce 命令可以调用以获得一些用户信息。命令是:

p4 -Ztag -F %clientName% info

现在我需要的是将此命令的结果保存在变量或文件(最好是前者)中。但是对于我的生活,我不知道该怎么做,有人可以帮助我吗。

我尝试了以下命令:

p4 -Ztag -F %clientName% info > %HOMEPATH%\clientName.txt

但结果是:

p4 -Ztag -F  info  1>\Users\UserName\clientName.txt

文件 "clientName.txt" 包含:

info

这是不正确的。

调试批处理应该遵循一些规则。

  • 运行 打开 cmd 中的批处理 window.
  • 暂时切换echo on显示正在执行的命令
  • 将变量的内容回显到屏幕以查看当前状态。
  • 在关键点插入暂停命令,不必频繁滚动
  • 还暂时禁用较长的提示消息以整理输出
  • 为要检查的变量插入前缀(如 _),
    所以你可以使用 set _>>logfile.log
  • 将它们输出到日志文件
  • 前缀命令在使用 @
  • 调试时无关紧要

@Echo on
@Echo clientName=[%clientName%]
@pause
p4 -Ztag -F %clientName% info
@pause

不要单独使用 %HOMEPATH%,与 %HOMEDRIVE%%HOMEPATH%%USERPROFILE%

一起使用
p4 -Ztag -F %clientName% info > "%USERPROFILE%\clientName.txt"

您始终需要在批处理文件中对百分比进行转义——命令行会忽略未定义的环境变量,但脚本会将它们扩展为空字符串。由于这些百分比用于 p4 命令的变量扩展,您 永远不会 希望 shell 接触它们,无论是否定义了局部环境变量。

试一试:

p4 -Ztag -F %%clientName%% info>CLIENTNAME
set /p CLIENTNAME=<CLIENTNAME

归功于:

  • Escape percent in bat file
  • Batch equivalent of Bash backticks

(第一行将值放入名为 CLIENTNAME 的文件中,第二行将其从文件中读取到同名的环境变量中。出于某种原因,set /p 不能仅使用像你想象的那样直接管道;我放弃了调试那个。)

作为旁注,如果您将其存储在环境变量中并打算将其传递给您从其他食谱获得的另一个 p4 命令,请注意这可能是多余的,因为大多数 p4 命令都可以运行在客户端上已经默认为 p4 info 给你的同一个客户端。 :) 在 p4 命令之间传递信息的方式也比 Windows 环境变量更简单。

感谢您的帮助。以下完美运行:

p4 -Ztag -F %%clientName%% info > "%USERPROFILE%\clientName.txt"
set /p v=<"%USERPROFILE%\clientName.txt"