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