• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >vbs > BAT批处理、VBScript批量安装字体脚本分享

BAT批处理、VBScript批量安装字体脚本分享

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了无法找到脚本vbscript,vbscript脚本语言,vbscript脚本,脚本引擎vbscript,vbscript等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

根据新系统要求,经常要部署一些原来系统里没有的字体,原先我为了图省事经常会要求用户手动安装字体文件,虽然Windows的易用性做得相当不错,但是仍然要照顾一些不会安装字体的人,其实把这些字体打包进安装包更为方便,不过我觉得总不能每有新字体都要搞个安装包那么麻烦吧。更重要的是仍然有人会问我字体怎么安装,以前清一色的Windows XP系统,我倒也方便,直接告知打开控制面板找到字体文件夹,把要安装的字体拖进去即可;现在有Windows 7还是Windows 8等各种版本Windows系统,对于安装字体这个小小操作我也开始分情况讨论了。

使用特殊文件夹或者DESKTOP.INI方法

使用特殊文件夹方法

Windows保留了一种特殊文件夹引用,比如在Windows XP的情况下,新建一个文件夹,然后在文件夹重命名后缀.{645FF040-5081-101B-9F08-00AA002F954E}(注意以点号分隔),然后这个文件夹就变成了回收站的一个引用,当我们点击进去的时候实际上进去的是回收站。

好了我在想对于字体是不是也可以搞个文件夹引用,这样直接叫用户把要安装的字体拖进去即可,大家注意到这个成功的关键在于后面那段长长的ID号,那个学名叫做GUID,通常可以通过注册表查询,主要路径在于:
比如回收站就位于下面的注册表路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
</div>
对于字体我也在如下路径找到了:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace
</div>

字体的GUID是{D20EA4E1-3957-11d2-A40B-0C5020524152},但是当我新建一个文件夹并且名称以.{D20EA4E1-3957-11d2-A40B-0C5020524152}(注意点号)结尾,当我点进去时却不能进入字体文件夹,于是这个想法被验证为失败。

使用Desktop.ini方法

其实建立特殊文件夹还有一个方法就是采用文件夹的Desktop.ini,抱着试试的心态,我在文件夹内部建立了Desktop.ini,内容如下:
[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=38
CLSID={D20EA4E1-3957-11d2-A40B-0C5020524152}
</div>

很遗憾,依然不能直达字体目录,所以这一种办法也是行不通的。

本着方便群众的想法,我决定做个小小的程序,当然我首先求助了万能的Google。原本想搞个桌面程序来着,也找到老外现成的代码FontReg – Windows Font Registration & Installation Utility。后来随着研究的深入,突然发现这玩意儿用批处理或者脚本实现更为简单。

CMD或BAT批处理安装字体

通常情况下字体文件夹位于C:\Windows\Fonts,转换为带环境变量的通用版本为%SystemRoot%\Fonts\,我们也许想当然的认为将字体复制到这个路径下就完成了安装,其实不然,系统安装字体不单单是将字体文件复制到这个路径下,其还进行了其他操作,比如更新注册表字体列表。通常情况下这个列表位于路径如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
</div>

于是对于批处理来说,网上安装字体流程大概分为两派,首先第一步复制到Fonts文件夹,这个是公认的,第二步则有不同:一派认为应该更新注册表;另一派则倾向于使用AddFontResource这个函数。

使用AddFontResource更新系统字体列表

什么是AddFontResource函数?这是个Win32 API函数,位于gdi32.dll动态链接库上,MSDN参考见这里。我们可以编译调用这个函数,什么?“编译”?貌似和这里讲的批处理差远了吧,别急,好在这个函数签名不复杂,其有个AddFontResourceA的ANSI版本,这样给我们直接外部通过rundll32调用提供了可能,例如下面的代码片段:
rundll32.exe gdi32.dll,AddFontResourceA %SystemRoot%\Fonts\字体.ttf
</div>

具体的代码如下(来源不详,将该批处理和TTF字体位于同一路径下,然后双击即可):
for /f %%a in ('dir /x /b *.ttf') do (
dir %windir%fonts%%a>nul 2>nul||(copy %%a %windir%fonts>nul 2>nul&rundll32.exe gdi32.dll,AddFontResourceA %windir%fonts%%a)
)
</div>

实际操作来看,这段代码在我的电脑上没有产生任何效果。

使用注册表更新系统字体列表

参考《Windows 7: Installing fonts via command line/script》这个帖子,找到下面的代码:

@ECHO OFF
TITLE Adding Fonts..
REM Filename: ADD_Fonts.cmd
REM Script to ADD TrueType and OpenType Fonts for Windows
REM By Islam Adel
REM 2012-01-16
 
REM How to use:
REM Place the batch file inside the folder of the font files OR:
REM Optional Add source folder as parameter with ending backslash and dont use quotes, spaces are allowed
REM example "ADD_fonts.cmd" C:\Folder 1\Folder 2\
 
IF NOT "%*"=="" SET SRC=%*
ECHO.
ECHO Adding Fonts..
ECHO.
FOR /F %%i in ('dir /b "%SRC%*.*tf"') DO CALL :FONT %%i
REM OPTIONAL REBOOT
REM shutdown -r -f -t 10 -c "Reboot required for Fonts installation"
ECHO.
ECHO Done!
PAUSE
EXIT
 
:FONT
ECHO.
REM ECHO FILE=%~f1
SET FFILE=%~n1%~x1
SET FNAME=%~n1
SET FNAME=%FNAME:-= %
IF "%~x1"==".otf" SET FTYPE=(OpenType)
IF "%~x1"==".ttf" SET FTYPE=(TrueType)
 
ECHO FILE=%FFILE%
ECHO NAME=%FNAME%
ECHO TYPE=%FTYPE%
 
COPY /Y "%SRC%%~n1%~x1" "%SystemRoot%\Fonts\"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "%FNAME% %FTYPE%" /t REG_SZ /d "%FFILE%" /f
GOTO :EOF
</div>

仔细阅读代码后发现,这段批处理在复制字体并更新注册表后居然要重启电脑(汗~),这种做法显然对最终用户不太友好,综合以上我决定放弃批处理的方式安装字体。

使用VBSCRIPT安装字体

最后我还是干回老本行,使用VBScript脚本来实现这个功能。脚本的重点是采用Shell.ApplicationActiveX/COM对象实现复制到系统特殊文件夹下,实际上这个操作和用户手动复制到字体文件夹下一样,系统会自动为我们安装字体而不需要我们顾及注册表更新的问题,对于Vista及更高版本的系统来说,我参考了《The true ultimate font install for Windows 7 and XP vbs》的做法,使用.InvokeVerb("Install")直接调用字体文件对象的安装命令。

详细的代码如下(请复制的朋友手下留情,保留版权信息,谢谢):

'
' File Description : VBScript Windows Fonts Installer
'
' Copyright (c) 201

您可能想查找下面的文章:

  • 用VBScript制作QQ自动登录的脚本代码
  • 用VBScript写合并文本文件的脚本
  • 用vbscript实现隐藏任务栏图标的脚本
  • vbscript 注册表脚本书写
  • BAT批处理、VBScript批量安装字体脚本分享
  • VBScript开发自动化测试脚本的方法分析
  • 用vbscript脚本实现返回 IP 配置数据的代码
  • 用vbscript实现将脚本的输出复制到剪贴板
  • 使用vbscript脚本在表单中进行选择的代码
  • vbscript脚本编程教程2利用fso来进行文件操作

相关文章

  • VBS教程:函数-Space 函数
  • 非常棒的lcx写的非常规运行vbs
  • VBS教程:函数-Eval 函数
  • vbs列出内网的中计算机(工作组也可以)
  • VBS教程:函数-Cos 函数
  • VBS中通过调用CAPICOM对象实现SHA1&MD5加密
  • vbscript语句中“&amp;H”专用于16进制数表示
  • 用vbs实现判断计算机是笔记本还是台式机的代码
  • 远程或本地获取系统信息的脚本RGIS.vbs
  • 一个用vbs查找硬盘所有分区中的指定程序的代码

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 用vbs实现zip功能的脚本
    • VBS读取注册表的两种方法
    • 在桌面右下角出现温馨提示的vbs冒泡程序
    • VBScript教程 第三课VBScript数据类型
    • 雷客图ASP站长安全助手vbs测试版代码
    • VBS教程:正则表达式简介 -建立正则表达式
    • vbs实现unicode和ascii编码转换
    • 利用VBS脚本自动创建计算机帐户的代码
    • 用VBS精确计算100的阶乘的实现代码
    • VBS脚本加密/解密VBS脚本(简易免杀版1.1)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有