Azure Devops - AzureDevops バッチ ファイルで 1 つにスペースが含まれている場合に 2 つの変数を連結する方法

okwaves2024-01-25  8

ps スクリプトにこの入力があります。 $(Build.ArtifactStagingDirectory) システム変数を渡して、入力 %1 のパスを取得しています。パスにはスペースが含まれています (例: E:\Build Agents\Agent2\_work\15\a)。これを他のパスと連結する必要がありますが、それができません。

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

これは私の出力です。ディレクトリは E:\Build Agents\Agent2\_work\15\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

ディズって何ですか?バッシュ?パール? cmd?

– 4c74356b41

2020 年 9 月 3 日 9:11

@AdminOfThings はい、PowerShell と azureDevops です

– メフル・パルマル

2020 年 9 月 3 日 9:27

@4c74356b41bash です。詳細を更新しました

– メフル・パルマル

2020 年 9 月 3 日 9:28



------------------------

これに対する解決策を見つけました。 %1 にはスペースがあったため、割り当てる前にアポストロフィを削除する必要がありました。 ~ 変数を使用してそれを行いました。動作するコードは次のようになります。

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



------------------------

これを試してみてください:

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%

スペースがあれば、「」を指定できます。入力を提供します。 コードでは二重引用符を削除できます。

%Directory:"=% - 文字列リテラルから二重引用符を削除します。

出力例:

7

@mehul - 上記はバッチ用です。これがあなたが探しているものであるかどうかお知らせください。

– サティア V

2020 年 9 月 3 日 10:36

はい、しかし問題は BuildDrop="E:\Build Agents\Agent2\_work\15\a" です。アポストロフィがあり、それらも連結されます。それは私が望んでいないことです。スペースを含む値を読み取るにはアポストロフィが必要です。

– メフル・パルマル

2020 年 9 月 3 日 10:36

BuildDrop=E:\Build Agents\Agent2_work\15\a ...アポストロフィは付けないでください。アポストロフェを付けずに文字列を入力します。上の例のようなもの

– サティア V

2020 年 9 月 3 日 10:37

私のサンプル出力をよく見てみると。アポストロフィは付けていません。出力は単に C:\Users\svijay\Desktop\adapters\bin

です。 – サティア V

2020 年 9 月 3 日 10:38

はい、入力にスペースがないためです。 word.bat C:\Users\s vijay\Desktop で試してください。私の入力フォルダーにはしたがって、スペースにはアポストロフィが必要です。

– メフル・パルマル

2020 年 9 月 3 日 10:43



------------------------

これを使用して、パスを含む 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 でパラメータを使用する方法の記事があります。



------------------------

Azure DevOps で PowerShell タスクを使用して、2 つの変数を連結できます。 サンプル:

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

R結果:

また、同様の問題を見つけましたので、こちらも確認してください。

アップデート 1

Azure DevOps パイプラインで Power Shell スクリプトを使用する

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

結果:

ローカルの Power Shell を使用する

結果:

アップデート 2

.bat ファイル

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

パイプラインの結果:

9

変数値を設定するにはどうすればよいですか? Write-host はそれを印刷するだけです。

– メフル・パルマル

2020 年 9 月 3 日 9:47

Azure DevOps 変数を使用する場合は、ログ コマンド Write-Host "##vso[task.setvariable variable=testvar;]testvalue" を使用する必要があります。 learn.microsoft.com/en-us/azure/devops/pipelines/scripts/…

– クシシュトフ マジェ

2020 年 9 月 3 日 10:02

こんにちは @MehulParmar さん、回答を更新しました。確認してください。

– ヴィト・リュー

2020 年 9 月 3 日 10:05

@VitoLiu-MSFT はい、これで印刷されます。ただし、変数の値を設定する方法。変数 Directory の値を変更したい

– メフル・パルマル

2020 年 9 月 3 日 10:15

@MehulParmar、環境変数 Build.ArtifactStagingDirectory を変更したいということですか?それともパイプラインに新しい環境変数を追加しますか? 「はい」の場合は、chしてくださいこの回答を確認してください

– ヴィト・リュー

2020 年 9 月 3 日 10:18

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。