Board logo

标题: [注册表类] [已解决]键值名称是乱码的注册表键值批处理如何删除? [打印本页]

作者: dyfgkxue    时间: 2015-3-13 11:08     标题: [已解决]键值名称是乱码的注册表键值批处理如何删除?

单位的很多电脑安装了中文名称的字体,我想用批处理删除Fonts文件夹中的中文名称字体,并删除"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"里,键值数据为中文名称字体对应的键值名称。
  1. @ECHO OFF & SETLOCAL ENABLEEXTENSIONS
  2. SET FontsRegKey="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
  3. ECHO 文星简小标宋>tmp.txt
  4. ECHO 文星仿宋>>tmp.txt
  5. rem ECHO 文星楷体>>tmp.txt
  6. rem ECHO 文星黑体>>tmp.txt
  7. rem ECHO 文星标宋>>tmp.txt
  8. ECHO 方正小标宋简体>>tmp.txt
  9. ECHO 方正仿宋简体>>tmp.txt
  10. ECHO 方正小标宋_GBK>>tmp.txt
  11. rem ECHO 方正仿宋_GBK>>tmp.txt
  12. rem ECHO 方正楷体_GBK>>tmp.txt
  13. rem ECHO 方正黑体_GBK>>tmp.txt
  14. FOR /f "eol= delims=" %%i IN (tmp.txt) DO (
  15.    ECHO 正在查找%windir%\Fonts\%%i.ttf & pause >nul
  16.    IF EXIST "%windir%\Fonts\%%i.ttf" (
  17.       DEL /q /f "%windir%\Fonts\%%i.ttf"
  18.       ECHO %%i.ttf删除成功! & PAUSE >nul
  19.       ) ELSE (
  20.       ECHO 未找到%%i.ttf! & PAUSE >nul
  21.       )
  22.    ECHO %%i
  23.    FOR /f %%j IN ('reg query %FontsRegKey% ^| findstr /i %%i.ttf') DO (
  24.    REG delete %FontsRegKey% /v "%%j (TrueType)" /f >nul 2>nul &&ECHO 注册表键值"%%j (TrueType)"删除成功!||ECHO 注册表键值"%%j (TrueType)"删除失败!
  25.    )
  26. PAUSE
  27. )
  28. DEL tmp.txt
复制代码
上述批处理运行没有问题,但有两个问题,求助解决:
1.第17、18行,为什么用 && 连接在一起,批处理就不能运行,我的本意是如果DEL成功,再用ECHO显示删除成功。请问如何修改才能用 && 连接在一起?
2.文星简小标宋.ttf安装时,在注册表里生成的键值名称是乱码,上述批处理不能删除该键值名称,请问如何才能删除?

文星简小标宋.ttf下载链接:
http://pan.baidu.com/s/1c0xXFLe
作者: DAIC    时间: 2015-3-13 11:38

17、18
  1. DEL /q /f "%windir%\Fonts\%%i.ttf" && ECHO %%i.ttf删除成功!
  2. PAUSE
复制代码

作者: pcl_test    时间: 2015-3-13 12:52

回复 1# dyfgkxue
修改了下你代码的处理逻辑,文星简小标宋注册表乱码的问题要单独处理,使用注册表文件直接导入空值删除的方法,reg文件见附件
  1. @ECHO OFF & SETLOCAL ENABLEEXTENSIONS
  2. SET FontsRegKey="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
  3. ECHO 文星仿宋>>tmp.txt
  4. rem ECHO 文星楷体>>tmp.txt
  5. rem ECHO 文星黑体>>tmp.txt
  6. rem ECHO 文星标宋>>tmp.txt
  7. ECHO 方正小标宋简体>>tmp.txt
  8. ECHO 方正仿宋简体>>tmp.txt
  9. ECHO 方正小标宋_GBK>>tmp.txt
  10. rem ECHO 方正仿宋_GBK>>tmp.txt
  11. rem ECHO 方正楷体_GBK>>tmp.txt
  12. rem ECHO 方正黑体_GBK>>tmp.txt
  13. FOR /f "eol= delims=" %%i IN (tmp.txt) DO (
  14.    ECHO 正在查找%windir%\Fonts\%%i.ttf
  15.    IF EXIST "%windir%\Fonts\%%i.ttf" (
  16.       DEL /q /f "%windir%\Fonts\%%i.ttf" && ECHO %%i.ttf删除成功!
  17.       FOR /f %%j IN ('reg query %FontsRegKey% ^| findstr /i %%i.ttf') DO (
  18.       REG delete %FontsRegKey% /v "%%j (TrueType)" /f >nul 2>nul &&ECHO 注册表键值"%%j (TrueType)"删除成功!||ECHO 注册表键值"%%j (TrueType)"删除失败!
  19.       )
  20.    ) ELSE (
  21.       ECHO 未找到%%i.ttf!
  22.    )
  23. )
  24. DEL tmp.txt
  25. del "%windir%\Fonts\文星简小标宋.ttf" 2>nul
  26. regedit /s "文星简小标宋.reg"
  27. PAUSE
复制代码

作者: dyfgkxue    时间: 2015-3-13 14:32

回复 3# pcl_test
想了想为什么用
regedit /s "文星简小标宋.reg"
可以成功的原因:
导出的“文星简小标宋.reg”文件是uicode格式,保持了键值名称的原样,所以能够成功!
我再测试测试不同的操作系统(win7/winxp)是否兼容!




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2