如何用多行字符串替换 Powershell 中的字符串?
How do I replace a string in Powershell with a Multi-Line String?
我正在尝试在 powershell 中创建富文本格式的报告。我有一个模板列表的 space,由文本 %TEMPLATES%
表示,我试图将其替换为目录中的项目列表。但是,虽然我可以在项目列表中添加换行符以将它们分开(并且这在控制台 window 中打印 OK),但当我在 rtf 文档中替换它们时,换行符不存在并且所有项目都没有连接间距。我不明白为什么这个 -replace 不起作用。请参阅下面的示例代码:
$statusRecordTemplate = 'StatusRecord.rtf'
$templates = (Get-ChildItem $templatesPath) | Join-String -Separator "`r`n"
$content = Get-Content $statusRecordTemplate -Raw
$content = $content -replace '%TEMPLATES%' , $templates
Set-Content -Path 'C:\temp\testout.rtf' -Value $content
RTF 中的换行符并不重要。您必须改用 paragraph tag (\par
)。
$templates = (Get-ChildItem $templatesPath) | Join-String -Separator '\par '
确保在标签后包含 space,如我的示例所示。当标签后跟文字文本时,这是必需的。
此外,您必须转义文字文本中的控制字符并正确编码任何 non-ASCII 个字符。有关详细信息,请参阅 this Q&A。
我正在尝试在 powershell 中创建富文本格式的报告。我有一个模板列表的 space,由文本 %TEMPLATES%
表示,我试图将其替换为目录中的项目列表。但是,虽然我可以在项目列表中添加换行符以将它们分开(并且这在控制台 window 中打印 OK),但当我在 rtf 文档中替换它们时,换行符不存在并且所有项目都没有连接间距。我不明白为什么这个 -replace 不起作用。请参阅下面的示例代码:
$statusRecordTemplate = 'StatusRecord.rtf'
$templates = (Get-ChildItem $templatesPath) | Join-String -Separator "`r`n"
$content = Get-Content $statusRecordTemplate -Raw
$content = $content -replace '%TEMPLATES%' , $templates
Set-Content -Path 'C:\temp\testout.rtf' -Value $content
RTF 中的换行符并不重要。您必须改用 paragraph tag (\par
)。
$templates = (Get-ChildItem $templatesPath) | Join-String -Separator '\par '
确保在标签后包含 space,如我的示例所示。当标签后跟文字文本时,这是必需的。
此外,您必须转义文字文本中的控制字符并正确编码任何 non-ASCII 个字符。有关详细信息,请参阅 this Q&A。