我的字符串格式如下:
<?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 ?>
我尝试了所有组合,但无法使报价正常工作。请提出解决方案。
答案 0 :(得分: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 ,完全合法。