Answers:
有可能,但是您必须编写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
在此处查看完整的解决方案。
*.ttf
和*.fon
字体(2)Const FONTS = &H14&
按照此处的建议使用(sevenforums.com/general-discussion/…)。我不是国王的VBS :(在此先感谢。
objFolderItem.InvokeVerb("Install")
在Windows Server 2012 R2上不起作用
copy
和reg add
不会使字体在Windows®10的程序中列出
在Powershell中,它可以很简单:
$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
dir fonts/*.ttf | %{ $fonts.CopyHere($_.fullname) }
Get-ChildItem -Recurse -include *.ttf | % { $fonts.CopyHere($_.fullname) }
Get-ChildItem
是Powershell的方式,我只是讨厌Powershell的方式(这里dir
是Unix shell的情感),而这只是它的别名。如果您要递归,则可以使用提供的选项。对于简单的“仅扫描此文件夹中的文件”,我的版本不那么冗长,更易读。
与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
在我的情况下,创建一个名为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提示符下运行快捷方式,然后应提示您。
我不能向您保证,如果他们可以使用它来运行提升代码,它的安全性如何。但是,这是一个解决方案。
如GeneQ先前所述,这就是您进行的方式(我已经对其进行了测试)
为/ F“ delims =;” %a in('dir C:\ FontsDir / B / ADHS / S')执行fontview%a
其中C:\ FontsDir是您的tff文件的存储目录。一旦执行,“ fontview”窗口将打开与“ FontsDir”目录中的tff文件一样多的窗口。您只需要点击“ Install”按钮,就可以了!您的字体已安装在系统上
希望对别人有帮助
for
命令代替(例如)for %a in (C:\FontsDir\*.*) do fontview "%a"
?
您没有列出Windows版本,但是我假设您运行的是Vista或7。复制到该目录需要管理权限。再次尝试执行操作,但是这次使用“提升的命令提示符”即时消息。