首页 > 解决方案 > Azure Devops:将命令行任务的输出保存到要在另一个步骤中使用的变量中

问题描述

在 Azure Devops 中,我能够添加命令行任务。该命令行会产生一个我想要捕获的输出,并能够将其保存到一个变量中,如果可能的话,以便在以后的步骤中使用。

例如,考虑我的命令行任务只是在dir /b产生以下输出的目录中列出文件

c:\temp\foo.txt
c:\temp\bar.exe

我想捕获上面列出的目录并在另一个 Azure Devops 任务中使用它们。

我怎样才能做到这一点?

标签: azure-devops

解决方案


我想捕获上面列出的目录并在另一个 Azure Devops 任务中使用它们。

您可以使用脚本来获取任务输出。然后将输出设置为环境变量。

以下是命令行任务脚本:

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`dir /b`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)

echo "##vso[task.setvariable variable=testvar;]%var1%"
echo "##vso[task.setvariable variable=testvar1;]%var2%"

ENDLOCAL

您可以通过在以下任务中使用变量$(variable name)

例如:

echo $(testvar)
echo $(testvar1)

结果如下:

测试结果

注意:dir /b输出是多行值。但变量不支持多行值。

您可以将输出拆分为多个变量或连接成一个字符串。

连接成一个字符串

echo "##vso[task.setvariable variable=testvar;]%var1%;%var2%

希望这可以帮助。


推荐阅读