如何从批处理脚本中将命令输出中的特定行转换为变量?

时间:2016-12-06 01:08:19

标签: windows batch-file perforce

我想从perforce获取更改列表描述,其中涉及调用p4 describe -s,因此输出将如下所示。有没有办法从输出中获取(从第三行修剪的字符)只使用Windows批处理语法?

Change 6582 by username on 2016/12/06 00:35:41

        MyChangeDescription

Affected files ...

... //depot/foo.txt#7 edit
... //depot/foo2.txt#6 edit

2 个答案:

答案 0 :(得分:1)

试一试:

p4 -Ztag -F %Description% change -o 6582

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q40986156.txt"
FOR /f "usebackqskip=2tokens=*" %%a IN ("%filename1%") DO (
 SET "desc=%%a"
 GOTO show
)

:show
ECHO "%desc%"

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

我使用了一个名为q40986156.txt的文件,其中包含我的测试数据。

这使用文件作为输入。由于我无法访问perforce,因此无法对其进行测试,而是

@ECHO OFF
SETLOCAL
FOR /f "skip=2tokens=*" %%a IN ('p4 describe -s') DO (
 SET "desc=%%a"
 GOTO show
)

:show
ECHO "%desc%"

GOTO :EOF

应该是等效的。

简单地说,读取命令的输出,跳过前两行,标记整行,跳过前导空格。将找到的字符串分配给变量并立即退出循环。