Powershell命令为字符串加上颜色并在文档中替换

问题描述 投票:0回答:1

我以前从未使用过PowerShell,但是我们正在使用一个脚本,该脚本将正在运行的作业输出到写字板。该脚本已经为正在运行的所有内容输出了作业名称和“ In Progress”。我想用绿色突出显示“进行中”一词。在我在线检查并观看了一些教程之后,据我所知:

$Txt_File = "C:\Users\..."
$Selection = "In Progress"

$Change = Get-Content $Txt_File

$Change | ForEach-Object {$_-replace "In Progress", $Selection} | Set-Content $Txt_File

[我认为一个不错的选择是定义一个字符串“ In progress”,该字符串将在绿色背景上使用$_replace来查找文档中的确切单词,并将其替换为字符串$Selection。这就是我被卡住的地方...我曾尝试使用-ForegroudcolorwdcolorFont.color,但是每次遇到错误时,我都会尝试使用。如果您可以帮助我或者至少为我指明正确的方向。

powershell str-replace
1个回答
0
投票

让我们反向工程一个快速而又肮脏的解决方案,因此您可以直接看到RTF格式。

对于初学者,这是在写字板中创建的通用RTF文件的内容:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang9 The quick\par
brown\par
In Progress\par
fox jumped\par
In Progress\par
over the\par
In Progress\par
lazy dog\par
}

用写字板中的绿色背景颜色和白色字体颜色为'In Progress'行着色产生了此RTF:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\colortbl ;\red255\green255\blue255;\red0\green128\blue0;}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang9 The quick\par
brown\par
\cf1\highlight2 In Progress\cf0\highlight0\par
fox jumped\par
\cf1\highlight2 In Progress\cf0\highlight0\par
over the\par
\cf1\highlight2 In Progress\cf0\highlight0\par
lazy dog\par
}

因此,您似乎需要类似以下内容:

$Rtf_File = 'C:\Users\...\Example.rtf'
$Selection = 'In Progress'
$Rtf_Replacement = "\cf1\highlight2 $Selection\cf0\highlight0"
$Insert2ndRow = '{\colortbl ;\red255\green255\blue255;\red0\green128\blue0;}'

$rows = Get-Content -Path $Rtf_File
$rows[0],$Insert2ndRow,$rows[1..($rows.count-1)] | ForEach-Object { $_ -replace $Selection, $Rtf_Replacement } | Set-Content -Path $Rtf_File

...基本上是在RTF的第二行中插入颜色定义行,并用其彩色RTF版本替换所有出现的'In Progress'。

请记住,这个快速而肮脏的解决方案实际上对RTF结构一无所知,因此它可能会破坏某些预格式化的RTF文件。因此,请备份文件,并自行承担风险。

不过希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.