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

时间:2018-06-14 11:15:19

标签: batch-file command-line perforce

我正在批处理文件中工作,并且我有一个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

哪个不对。

3 个答案:

答案 0 :(得分:1)

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

给它一个旋转:

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

信用:

(第一行将值放入名为CLIENTNAME的文件中,第二行将其从文件中读取到同名的env var。由于某种原因,set /p不能仅使用像你这样的直接管道认为它会;我放弃了调试那个。)

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

答案 1 :(得分:0)

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

  • 在打开的cmd窗口中运行批处理。
  • 暂时切换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"

答案 2 :(得分:0)

感谢您的帮助。以下工作完美:

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