在现代应用程序开发和设计中,合适的字体能够大大提升用户体验和界面美观度。为了方便地安装和管理字体,本文将介绍如何使用 PowerShell 脚本自动化安装字体。
1. 背景
在 Windows 操作系统中,字体通常存储在 C:\Windows\Fonts
目录中,用户可以通过安装新字体到系统中来使用。如果要一次安装大量新字体,手动安装可能会很繁琐,因此编写一个自动化脚本可以节省时间和精力。
2. 脚本功能
- 从指定目录中递归查找字体文件(包括
.ttf
和.otf
文件)。 - 将字体文件复制到系统字体目录。
- 在注册表中注册新安装的字体,以便在系统中可以正确识别和使用。
3. 获取字体:
以安装 JetBrainsMono 字体为例,从JetBrains官网下载字体:https://www.jetbrains.com/lp/mono/
得到一个zip压缩包(JetBrainsMono-2.304.zip
),里面大概包含30多个字体文件,解压到你的本地路径,如:D:\JetBrainsMono-2.304
3. PowerShell 脚本
以下是完整的脚本代码:
# 定义源文件夹,包含字体文件
$SourceFolder = "D:\JetBrainsMono-2.304"
# 定义注册表路径
$FontsRegistryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
# 添加系统绘图的程序集
Add-Type -AssemblyName System.Drawing
# 创建一个新的私有字体集合
$WindowsFonts = [System.Drawing.Text.PrivateFontCollection]::new()
# 获取源文件夹中所有的 .ttf 和 .otf 字体文件,并递归查找
Get-ChildItem -Path $SourceFolder -Include *.ttf, *.otf -Recurse -File | ForEach-Object {
# 将字体文件复制到系统字体文件夹中
Copy-Item -Path $_.FullName -Destination "$env:SystemRoot\Fonts" -Force -Confirm:$false -PassThru
# 输出当前正在安装的字体名称
Write-Host "正在安装字体: $($_.Name)"
# 将字体文件添加到私有字体集合中
$WindowsFonts.AddFontFile($_.Fullname)
# 添加字体的注册表值
$FontFamilyName = $WindowsFonts.Families[-1].Name
$RegistryValue = @{
Path = $FontsRegistryPath # 字体注册表路径
Name = $FontFamilyName # 字体名称
Value = $_.Name # 字体文件的名称
}
# 移除可能已存在的同名字体注册表项
Remove-ItemProperty -Name $FontFamilyName -Path $FontsRegistryPath -ErrorAction SilentlyContinue
# 添加新的注册表项以注册新安装的字体
New-ItemProperty @RegistryValue
} | Out-Null
- 修改的地方只有一处:将
$SourceFolder
= 改成你的实际解压路径。
脚本执行截图:
4. 使用说明
- 需要以 管理员权限 运行 ps1 脚本,否则可能没有权限修改系统字体目录和注册表。
- 确保指定的 源文件夹路径 和 字体文件类型 是正确的。
5. 结论
通过使用 PowerShell 脚本,你可以高效地自动化字体的安装过程,节省时间并减少手动操作中的错误。这样的脚本在进行大规模部署时尤为重要,尤其是在需要统一字体样式的环境中。