有人知道如何通过命令提示符在Windows上安装字体文件(.ttf、.TTF、.otf、.OTF等等)吗?
据我所知,需要将文本文件移动到正确的文件夹,然后还要创建一个注册表值。但我还没有找到一个被确认可以工作的方法。
注意:我使用的是Windows 8,这可能会有所不同。
另外说明一下:我正在尝试批量安装从MKV文件中提取的字体。(因此,这将是一个部分包含在更大的.bat文件中的函数,如果需要,我可以发布代码)
有人知道如何通过命令提示符在Windows上安装字体文件(.ttf、.TTF、.otf、.OTF等等)吗?
据我所知,需要将文本文件移动到正确的文件夹,然后还要创建一个注册表值。但我还没有找到一个被确认可以工作的方法。
注意:我使用的是Windows 8,这可能会有所不同。
另外说明一下:我正在尝试批量安装从MKV文件中提取的字体。(因此,这将是一个部分包含在更大的.bat文件中的函数,如果需要,我可以发布代码)
maybe this is needed too:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "FontName (TrueType)" /t REG_SZ /d FontName.ttf /f
此外,您需要以管理员模式运行该脚本。因此,如果 PowerShell 脚本是 InstallFonts.ps1,则批处理文件需要如下:
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out
powershell .\InstallFonts.ps1 2>> err.out
%systemroot%\fonts
并在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
中添加一个条目。您可以使用以下批处理文件自动完成此操作。Rem fontinst.bat
copy akbar.ttf %systemroot%\fonts
regedit /s font.reg
< p > font.reg 文件应包含以下内容:
REGEDIT4
\[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts\]
"Akbar Plain (TrueType)"="akbar.ttf"
Source: m.windowsitpro.com
我和一位同事找到了一个 PowerShell 解决方案,不需要管理员权限,也不会显示任何提示。您可以使用字体文件的名称来安装 并且 卸载它。这使得它在脚本编写中特别有用。
安装:
# Install-Font.ps1
param($file)
$signature = @'
[DllImport("gdi32.dll")]
public static extern int AddFontResource(string lpszFilename);
'@
$type = Add-Type -MemberDefinition $signature `
-Name FontUtils -Namespace AddFontResource `
-Using System.Text -PassThru
$type::AddFontResource($file)
卸载:
# Uninstall-Font.ps1
param($file)
$signature = @'
[DllImport("gdi32.dll")]
public static extern bool RemoveFontResource(string lpszFilename);
'@
$type = Add-Type -MemberDefinition $signature `
-Name FontUtils -Namespace RemoveFontResource `
-Using System.Text -PassThru
$type::RemoveFontResource($file)
你可以在cmd或powershell中这样使用它们:
> powershell -executionpolicy bypass -File .\Install-Font.ps1 .\myfonts\playfair-display-v22-latin-regular.ttf
> powershell -executionpolicy bypass -File .\Uninstall-Font.ps1 .\myfonts\playfair-display-v22-latin-regular.ttf
gdi32.dll
)。https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-addfontresourcew
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
(或用户等效项)中具有注册表键。 - Aalex Gabi import os
import subprocess
import time
# vb script template
_TEMPL = """
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("%s")
Set objFolderItem = objFolder.ParseName("%s")
objFolderItem.InvokeVerb("Install")
"""
vbspath = os.path.join(os.getcwd(), 'fontinst.vbs')
for directory, dirnames, filenames in os.walk(os.getcwd()):
for filename in filenames:
fpath = os.path.join(directory, filename)
if fpath[-4:] == ".ttf": # modify this line for including multiple extension
with open(vbspath, 'w') as _f:
_f.write(_TEMPL%(directory, filename))
subprocess.call(['cscript.exe', vbspath])
time.sleep(3) # can omit this
os.remove(vbspath) # clean
在根目录下运行这个Python脚本
你尝试将它们复制到字体文件夹中了吗?
copy font.ttf %windir%\Fonts
\root_folder
Install_fonts.cmd
\font_folder_1
font_1.ttf
font_2.otf
\font_folder_2
font_3.ttf
font_4.otf
\font_folder_3
font_5.ttf
font_6.otf
Install_fonts.cmd
文件中的path
),并将其用于如下所示的Install_fonts.cmd
批处理脚本中,该脚本位于root_folder
中(如果名称不同,请在Install_fonts.cmd
文件中也进行更改)。@echo off
set back=%cd%
for /d %%i in (%USERPROFILE%\Desktop\root_folder\*) do (
cd "%%i"
echo current directory:
cd
start /wait %USERPROFILE%\Desktop\fontreg-2.1.3-redist\bin.x86-64\FontReg.exe /move
timeout /t 1 /nobreak >nul
)
cd %back%
echo Process completed!
pause
因此,您需要以管理员身份在root_folder
中运行Install_fonts.cmd
,以自动化字体安装过程。
干杯
批处理文件示例。它在当前目录中运行。
IF "%*" NEQ "" SET FONT=%* (
FOR /F %%i in ('dir /b "%FONT%*.*tf"') DO CALL :DEST %%i
) else (
EXIT
)
:DEST
SET FONTFILE=%~n1%~x1
SET FONTNAME=%~n1
IF "%~x1"==".ttf" SET FONTTYPE=TrueType
IF "%~x1"==".otf" SET FONTTYPE=OpenType
ECHO FILE = %FONTFILE%
ECHO NAME = %FONTNAME:-= %
ECHO TYPE = %FONTTYPE%
fontview %~dp0%FONTFILE%
GOTO :EXIT