如何在PowerShell 5中更改字体属性?

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

我想使用Write-Host将字体设置为我正在打印的路径的粗体。我可以灵活地使用其他方法,例如echo或其他方法。

我尝试过其他方法,例如Write-Debug等,也检查了模块WindowsConsoleFonts。但是它们都不支持字体属性,例如在打印它们时使其变为粗体或斜体。

$pathString = "[" + (Get-Location) + "]"
Write-Host $pathString -ForegroundColor Cyan

我正在使用不支持MarkDown渲染的PowerShell 5.1,否则我会使用Markdown完成它。

windows powershell shell
1个回答
0
投票

您可以通过VT (Virtual Terminal) escape sequences实现粗体文本

但是,常规Windows控制台窗口(conhost.exe)确实支持斜体,并且其即将推出的后继产品Windows Terminal(至少截至写作)。[[1]

在最新版本的Windows 10中,默认情况下在Windows PowerShell和PowerShell Core中都启用了对VT序列的支持。

但是,Write-Host不支持它们,因此必须将转义序列直接嵌入传递给Write-Host的字符串中(或如果传递到控制台,则将字符串发送到成功输出流中:) >

注意:

  • 我在下面的示例中省略了Write-Host,因为这不是严格必要的,但是通常确实应该将彩色文本写入显示(主机),而不是成功输出流。

  • 虽然最好始终将VT序列用于所有格式需求-包括颜色-可以将它们与Write-Host -ForegroundColor / -BackgroundColor`结合使用。

  • PowerShell Core

PowerShell Core支持通过"..."转义序列将转义序列直接

嵌入到`e(双引号字符串)中,转义序列扩展为文字ESC字符,即initiates的字符VT转义序列。
"To `e[1mboldly`e[m go ..., in `e[36mcyan`e[m."

Windows PowerShell

[`e不支持;最简单的解决方案是使用\e作为占位符,并使用-replace代替实际的ESC字符(Unicode代码点0x1b):

"To \e[1mboldly\e[m go ..., in \e[36mcyan\e[m." -replace '\\e', [char] 0x1b

[[1]从PowerShell Core

,您可以运行以下测试命令来查看单词italics是否以斜体显示:"`e[3mitalics`e[m after"请注意,macOS以及至少某些Linux发行版中支持终端<< are>中的斜体。例如Ubuntu 18.04
© www.soinside.com 2019 - 2024. All rights reserved.