0

我有一个要求,我的字符串格式如下:

<?define BuildNumber = "8314" ?>

我在 TFS 2017 构建模板中使用以下 powershell 脚本来替换内部版本号值:

$content = Get-Content -path "$(Build.SourcesDirectory)\Install\Common\Constants.wxi"
$num  = $(Build.BuildId)
$content -Replace '(BuildNumber\s*=\s*")\d*("\s*)', "`$1 $num `$2" |  Out-File $(Build.SourcesDirectory)\Install\Common\Constants.wxi

这给出了<?define BuildNumber = " 27994 " ?>不正确的输出,因为我不希望值中有空格。当我尝试使用下面的代码时,它不起作用。

$content -Replace '(BuildNumber\s*=\s*")\d*("\s*)', "`$1$num`$2" |  Out-File  $(Build.SourcesDirectory)\Install\Common\Constants.wxi

输出 :<?define $27994 ?>

我尝试了所有组合,但无法让报价正常工作。请提出解决方案。

4

1 回答 1

2

使用花括号“转义”组号

$content -Replace '(BuildNumber\s*=\s*")\d*("\s*)', "`${1}$num`$2" | Out-File $(Build.SourcesDirectory)\Install\Common\Constants.wxi

关于为什么原始代码不起作用的一点说明:解析 $num 变量后,替换字符串变为$127994$2。这意味着 -replace 运算符正在尝试查找显然不存在的组$127994 。当我们添加花括号时,它变为${1}27994$2,这是完全合法的。

于 2018-12-13T11:00:33.417 回答