当 AzureDevops 批处理文件中有空格时如何连接两个变量

how to concatenate two variables when one has spaces in it in AzureDevops batch file

我的 ps 脚本中有这个输入。我正在传递 $(Build.ArtifactStagingDirectory) 系统变量以获取输入 %1 中的路径。该路径有空格,即 E:\Build Agents\Agent2\_work\a。我需要将它与其他路径连接起来,但我做不到。

set BuildDrop=%1
set Directory=%BuildDrop% + "\adapters\bin"

这是我的输出,这是不正确的,因为 Directory 应该类似于 E:\Build Agents\Agent2\_work\a\adapters\bin。如何解决?

set BuildDrop="E:\Build Agents\Agent2\_work\a" 

set Directory="E:\Build Agents\Agent2\_work\a" + "\adapters\bin" 

我的构建管道中的任务是这样的

Task         : Batch script
Description  : Run a Windows command or batch script and optionally allow it to change the environment
Version      : 1.1.10

我们可以在 Azure DevOps 中使用 powershell 任务连接两个变量。 示例:

Write-Host "Build.ArtifactStagingDirectory is $(Build.ArtifactStagingDirectory)"
Write-Host "Build.ArtifactStagingDirectory is $(Build.ArtifactStagingDirectory)\adapters\bin"

结果:

另外,我找到了一个similar issue,也请查收。

更新1

在 Azure DevOps 管道中使用 power shell 脚本

$testpath1 = "E:\Build Agents\Agent2\_work\a"
$testpath2 = "\adapters\bin"
Write-Host "path is $($testpath1)$($testpath2)"

结果:

使用本地电源shell

结果:

更新2

.bat 文件

set testpath1=E:\Build Agents\Agent2\_work\a
set testpath2=\adapters\bin
set newpath=%testpath1%%testpath2%
echo %newpath%

流水线结果:

您可以使用它来创建包含您的路径的 Azure DevOps 变量


powershell: |
  
  $directory = $(Build.ArtifactStagingDirectory)                                                                                                                                                                                                                                                                                    
  $newDirectory = $directory + "\adapters\bin"
                                        
  Write-Host "##vso[task.setvariable variable=testvar]$newDirectory " 


如果您需要在 powershell 脚本中设置变量

$BuildDrop=$args[0]
$Directory=$BuildDrop + "\adapters\bin"

Here 你有一篇关于如何在 powershell 中使用参数的文章。

你可以试试这个:

set BuildDrop=%1
set Directory= %BuildDrop%\adapters\bin
echo %Directory%

示例输出

这是串联代码。

%BuildDrop%\adapters\bin

在我上面的示例中,我尝试使用批处理连接 C:\Users\svijay\Desktop & \adapters\bin脚本

输出:C:\Users\svijay\Desktop\adapters\bin

更新:

@echo off 
set BuildDrop=%1
set Directory= %BuildDrop%\adapters\bin
set Directory= %Directory:"=%
echo %Directory%

如果您有space,您可以提供“”来提供输入。 在您的代码中,您可以删除双引号。

%Directory:"=% - 从字符串文字中删除双引号。

示例输出:

我找到了解决方案。由于我的 %1 有 space 我需要在分配之前删除撇号。我使用 ~ 变量做到了。工作代码如下所示。

set "BuildDrop=%~1"
set "Directory=%BuildDrop%\adapters\bin"