【问题标题】:PowerShell script to replace the tag value from one file to another file (tag value)PowerShell脚本将标签值从一个文件替换到另一个文件(标签值)
【发布时间】: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


【解决方案1】:

一般来说,使用Replace 等字符串方法直接查看结构化文本文件(如XML)是一种不好的做法。相反,建议使用相关的 (XML) 解析器。
举个例子:

$Xml = [Xml]'<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <EnvironmentVariables>
      <BRANCH>Master</BRANCH>
    </EnvironmentVariables>
  </RunConfiguration>
</RunSettings>'

$Xml.RunSettings.RunConfiguration.EnvironmentVariables.BRANCH = 'Develop'

$Xml.Save('C:\BuildAgent\work\5eb597bdb0233b69\test.xml')

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2011-11-05
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多