如何从批处理脚本中的命令输出中获取特定行到变量中?

How to get a specific line from command output in batch script into a variable?

我想从 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

试一试:

p4 -Ztag -F %Description% change -o 6582
@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

应该是等价的。

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