【发布时间】:2021-09-04 20:53:54
【问题描述】:
我需要使用 powershell 脚本将标签值从另一个文件替换到一个文件中。
例子:
文件 A:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<EnvironmentVariables>
<BRANCH>MASTER</BRANCH>
</EnvironmentVariables>
</RunConfiguration>
</RunSettings>
每次执行脚本时都需要替换以下值:
<BRANCH>MASTER</BRANCH>
文件B:(这里的分支名称每次都会更新,我需要将此文件中的动态值替换为文件A的分支标签)
文件名:branch.txt
值:分支名称
PS:它不应该附加文件A,只需替换值
我在 powershell 脚本下尝试过,但它是附加值而不是替换,而且它只适用于静态值。
这里 .runsettings 是我的文件 A 名称
$filePath = 'C:\BuildAgent\work\5eb597bdb0233b69\.runsettings'
$tempFilePath = "C:\BuildAgent\work\5eb597bdb0233b69\.runsettings"
$find = '<BRANCH>main</BRANCH>'
$replace = '<BRANCH>develop</BRANCH>'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
$replace 值每次都会改变,每次都会有不同的分支名称,所以我的 powershell 脚本应该能够从文件 B 中读取值(包含分支名称 ex:develop 或任何其他)并且能够只需替换上面提到的文件 A(.runsettings BRANCH 标记)中的值。
我不知道如何从文件 B 中获取动态值并在运行时将其替换为文件 A 的 BRANCH 值。
【问题讨论】:
-
向我们展示 FileB 的外观示例
-
FileB 只有分支名称 File B: cat branch.txt develop
-
因此,如果 FileB 包含
cat branch.txt develop,则需要使用((Get-Content -Path 'Path\to\FileB.txt' -Raw) -split '\s')[-1]或(Get-Content -Path 'Path\to\FileB.txt' -Raw) -replace '.*\s(\w+)$', '$1'将分支名称与分支名称分开。然后使用iRon's answer更新FileA -
感谢@Theo 的回复,只想再问一件事,如何将'Path\to\FileB.txt' 中的值替换为FileA: .runsettings BRANCH 值?
-
在变量
$branch = ((Get-Content -Path 'Path\to\FileB.txt' -Raw).Trim() -split '\s')[-1]中捕获您从文件B 读取的值,并在iRon 硬编码'Develop'处使用该值
标签: xml powershell automation