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

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

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

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

答案1

这是可能的,但你必须编写 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

或者,您可以根据自己的需要使用以下代码行;将其保存为 .vbs 文件,然后执行它。

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

例子:

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

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

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

查看完整解决方案这里

答案2

在 Powershell 中这可以简单如下:

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

答案3

与 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

答案4

创建一个名为 InstallFonts.vbs 的脚本文件(我将其放入C:\PortableApps\InstallFonts\以下代码中),将“SomeUser”替换为您希望能够安装字体的人员的用户名。然后在他们的桌面上创建适当的“安装字体”文件夹。

Set ofso = CreateObject("Scripting.FileSystemObject")
'SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)
SourceFolder = "C:\Users\SomeUser\Desktop\Install Fonts"


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

现在在他们的桌面上创建一个快捷方式,如下所示...

C:\Windows\System32\runas.exe /user:Administrator /savecred "wscript C:\PortableApps\InstallFonts\InstallFonts.vbs"

请注意,我使用了“管理员”。我启用了它并为其分配了密码。我想您可以使用任何管理员帐户来执行此操作。第一次运行快捷方式时,系统会提示您输入管理员密码。之后每次都可以正常工作。

如果它没有提示您输入密码,请从 cmd 提示符运行快捷方式,然后它会提示您。

我无法保证这有多安全,因为他们可能会用它来运行高级代码。但这确实是一个解决方案。

相关内容