我以前从未使用过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
。这就是我被卡住的地方...我曾尝试使用-Foregroudcolor
,wdcolor
,Font.color
,但是每次遇到错误时,我都会尝试使用。如果您可以帮助我或者至少为我指明正确的方向。
让我们反向工程一个快速而又肮脏的解决方案,因此您可以直接看到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文件。因此,请备份文件,并自行承担风险。
不过希望这会有所帮助。