Batch file 如何在AzureDevops批处理文件中包含空格时连接两个变量

Batch file 如何在AzureDevops批处理文件中包含空格时连接两个变量,batch-file,azure-devops,azure-powershell,Batch File,Azure Devops,Azure Powershell,我的ps脚本中有这个输入。我正在传递$(Build.ArtifactStagingDirectory)系统变量以获取输入%1中的路径。路径中有空格,即e:\Build Agents\Agent2\\u work\15\a。我需要将此连接到其他路径,但我无法这样做 set BuildDrop=%1 set Directory=%BuildDrop% + "\adapters\bin" 这是我的输出,不正确,因为目录应该类似于E:\Build Agents\Agent2\\u

我的ps脚本中有这个输入。我正在传递
$(Build.ArtifactStagingDirectory)
系统变量以获取输入
%1
中的路径。路径中有空格,即
e:\Build Agents\Agent2\\u work\15\a
。我需要将此连接到其他路径,但我无法这样做

set BuildDrop=%1
set Directory=%BuildDrop% + "\adapters\bin"
这是我的输出,不正确,因为
目录
应该类似于
E:\Build Agents\Agent2\\u work\15\a\adapters\bin
。如何解决这个问题

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

set Directory="E:\Build Agents\Agent2\_work\15\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任务来连接两个变量。 样本:

结果:

另外,我发现了一个,请也检查一下

更新1

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

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

使用本地电源外壳

结果:

更新2

.bat文件

set testpath1=E:\Build Agents\Agent2\_work\15\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”
您有一篇关于如何在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%
如果有空间,可以提供“”以提供输入。 在代码中可以删除双引号

%目录:=%-从字符串文本中删除双引号

样本输出:

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

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

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

wut是diz?bash?perl?cmd?@AdminOfThings是的,它是powershell和azureDevops@4c74356b41this是bash。我已更新detailshow以设置变量值?Write host将仅打印它。如果要使用Azure DevOps变量,则应使用日志记录命令
Write host“##vso[task.setvariable=testvar;]testvalue“
Hi@MehulParmar,我已经更新了答案,请检查,@VitoLiu MSFT是的,这将打印它。但是如何设置变量的值。我想更改变量
目录
@MehulParmar的值,您的意思是要更改env变量Build.ArtifactStagingDirectory吗?或者在管道中添加新的环境变量?如果是,请检查此@mehul-以上为批次。请告诉我这是否是您正在寻找的?是的,但问题是
BuildDrop=“E:\Build Agents\Agent2\\u work\15\a”
中有撇号,也会连接到一起。那是我不想要的。我需要一个撇号来读取有空格的值。BuildDrop=E:\Build Agents\Agent2\u work\15\a…不要给撇号。键入不带撇号的字符串。如果您仔细查看我的示例输出,则类似于上面的示例。我没有撇号。输出为C:\Users\svijay\Desktop\adapters\binyes,因为您的输入没有空间。尝试使用
word.bat C:\Users\s vijay\Desktop
。我的输入文件夹有空间,因此需要一个撇号。