如何从 Windows 命令提示符安装字体?

Mus*_*oon 47 windows fonts command-line installation

是否可以从 Windows 上的命令提示符安装字体?如果是,命令是什么?

我试过了copy [fontname].ttf C:\Windows\Fonts\,它说复制已完成,但我既无法在 Fonts 文件夹中找到所说的字体,也无法在任何程序的字体列表中找到它们,所以这肯定不起作用。(虽然我后来能够从 Fonts 文件夹中删除上述字体)

Gen*_*neQ 33

这是可能的,但你必须编写一个 Windows shell 脚本来做到这一点。单独复制不会安装字体:您还需要注册字体,例如

copy "FontName.ttf" "%WINDIR%\Fonts"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "FontName (TrueType)" /t REG_SZ /d FontName.ttf /f
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下代码行来满足您的需求;将其另存为 .vbs 文件,然后执行它。

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("<Folder or Share Location>")
Set objFolderItem = objFolder.ParseName("<TTF File Name>")
objFolderItem.InvokeVerb("Install")
Run Code Online (Sandbox Code Playgroud)

例子:

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Windows\Font")
Set objFolderItem = objFolder.ParseName("Myriad Pro.ttf")
objFolderItem.InvokeVerb("Install")
Run Code Online (Sandbox Code Playgroud)

另一种选择是为当前用户会话安装“临时”字体。这个想法是fontview.exe为每种字体运行,这使它可用于其他 Windows 应用程序:

for /F "delims=;" %%a in ('dir C:\ExtraFonts /B /A-D-H-S /S') do fontview %%a
Run Code Online (Sandbox Code Playgroud)

此处查看完整的解决方案。

  • `objFolderItem.InvokeVerb("Install")` 在 Windows Server 2012 R2 上不起作用 (2认同)

Gus*_*uss 22

在 Powershell 中,这可以很简单:

$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
dir fonts/*.ttf | %{ $fonts.CopyHere($_.fullname) }
Run Code Online (Sandbox Code Playgroud)

  • 我会用`Get-ChildItem -Recurse -include *.ttf | 更改第二行 % { $fonts.CopyHere($_.fullname) }` (4认同)
  • 诚然,`Get-ChildItem` 是 Powershell 方式,我只是讨厌 Powershell 方式(这里是 Unix shell 风格),而 `dir` 只是它的别名;如果你想要递归,那么你提供的选项就是要走的路。对于简单的“仅扫描此文件夹中的文件”,我的版本不那么冗长且更具可读性。 (2认同)
  • @Guss然后写`ls -Recurse -include *.ttf | % { $fonts.CopyHere($_.fullname) }` (2认同)

miv*_*ivk 7

与 GeneQ 的解决方案类似,这里有一个版本对脚本目录中的所有 .ttf 文件执行此操作:

Set ofso = CreateObject("Scripting.FileSystemObject")
SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)

Const FONTS = &H14&

Set objShell  = CreateObject("Shell.Application")
Set oSource   = objShell.Namespace(SourceFolder)
Set oWinFonts = objShell.Namespace(FONTS)

' Lame VBscript needs 4 f*ing lines instead of "if (/\.ttf$/i) " ...
Set rxTTF = New RegExp
rxTTF.IgnoreCase = True
rxTTF.Pattern = "\.ttf$"

FOR EACH FontFile IN oSource.Items()
    IF rxTTF.Test(FontFile.Path) THEN   
        oWinFonts.CopyHere FontFile.Path
    END IF
NEXT
Run Code Online (Sandbox Code Playgroud)


afr*_*ier 5

您还可以使用FontReg实用程序从命令提示符安装字体。