Batch file 如何在AzureDevops批处理文件中包含空格时连接两个变量
我的ps脚本中有这个输入。我正在传递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
$(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
。我的输入文件夹有空间,因此需要一个撇号。