无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5910|回复: 3
打印 上一主题 下一主题

[已解决] 请帮忙完善下读取Windows系统和Office安装ID的批处理,让它能识别出Offi...

  [复制链接]
跳转到指定楼层
1#
发表于 2021-1-14 21:52:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 七仙花 于 2021-1-21 21:05 编辑

最近参考网上的代码,写了个读取Windows系统和Office安装ID的批处理,Windows系统识别没问题,但是Office版本的不知如何区分2016和2019,自己也没条件测试,还请各位高手给完善下。


  1. @echo off
  2. :获取当前 Windows 系统版本
  3. for /f "tokens=3" %%m in ('wmic os get Caption') do if /i "%%m" neq "" set Win=%%m

  4. :输出 Windows 安装 ID
  5. echo Windows %Win% 安装 ID:
  6. echo.
  7. for /f "tokens=3 delims=: " %%i in ('cscript %windir%\system32\slmgr.vbs /dti') do set ID=%%i
  8. if /i %Win%==7 (echo %ID:~0,6%-%ID:~6,6%-%ID:~12,6%-%ID:~18,6%-%ID:~24,6%-%ID:~30,6%-%ID:~36,6%-%ID:~42,6%-%ID:~48,6%) else (echo %ID:~0,7%-%ID:~7,7%-%ID:~14,7%-%ID:~21,7%-%ID:~28,7%-%ID:~35,7%-%ID:~42,7%-%ID:~49,7%-%ID:~56,7%)

  9. :保存 Windows 安装 ID 到文本文件
  10. @echo Windows %Win% 安装 ID:> "%~dp0安装 ID.txt"
  11. if /i %Win%==7 (echo %ID:~0,6%-%ID:~6,6%-%ID:~12,6%-%ID:~18,6%-%ID:~24,6%-%ID:~30,6%-%ID:~36,6%-%ID:~42,6%-%ID:~48,6% >> "%~dp0安装 ID.txt") else (echo %ID:~0,7%-%ID:~7,7%-%ID:~14,7%-%ID:~21,7%-%ID:~28,7%-%ID:~35,7%-%ID:~42,7%-%ID:~49,7%-%ID:~56,7% >> "%~dp0安装 ID.txt")
  12. @echo %ID% >> "%~dp0安装 ID.txt"
  13. echo. >> "%~dp0安装 ID.txt"
  14. echo.
  15. echo.

  16. :获取当前 Office 版本
  17. for /f "tokens=2 delims==" %%1 in ('assoc .doc') do (
  18.    for /f "tokens=2 delims==" %%2 in ('ftype %%1') do (
  19.       for %%3 in (%%2) do (if not defined p set p=%%~dp3
  20.       )
  21.    )
  22. )
  23. set n=%p:~-2,1%
  24. if %n% equ 4 set V=2010
  25. if %n% equ 5 set V=2013
  26. if %n% equ 6 set V=2016

  27. :输出 Office 安装 ID
  28. echo Office %V% 安装 ID:
  29. echo.
  30. for /f "tokens=3 delims=:" %%i in ('cscript "%p%OSPP.VBS" /dinstid') do set ID=%%i
  31. if /i %V% equ 2010 (echo%ID:~0,7%-%ID:~7,6%-%ID:~13,6%-%ID:~19,6%-%ID:~25,6%-%ID:~31,6%-%ID:~37,6%-%ID:~43,6%-%ID:~49,6%) else (echo%ID:~0,8%-%ID:~8,7%-%ID:~15,7%-%ID:~22,7%-%ID:~29,7%-%ID:~36,7%-%ID:~43,7%-%ID:~50,7%-%ID:~57,7%)

  32. :保存 Office 安装 ID 到文本文件
  33. @echo Office %V% 安装 ID:>> "%~dp0安装 ID.txt"
  34. if /i %V% equ 2010 (echo%ID:~0,7%-%ID:~7,6%-%ID:~13,6%-%ID:~19,6%-%ID:~25,6%-%ID:~31,6%-%ID:~37,6%-%ID:~43,6%-%ID:~49,6% >> "%~dp0安装 ID.txt") else (echo%ID:~0,8%-%ID:~8,7%-%ID:~15,7%-%ID:~22,7%-%ID:~29,7%-%ID:~36,7%-%ID:~43,7%-%ID:~50,7%-%ID:~57,7% >> "%~dp0安装 ID.txt")
  35. @echo%ID% >> "%~dp0安装 ID.txt"
  36. echo.
  37. echo.
  38. echo.安装 ID 已保存,请查看当前目录下的《安装 ID.txt》
  39. echo.
  40. pause
复制代码



这几天又研究了下for语句,终于搞定了。用下面的语句即

  1. :获取 Microsoft Office 安装路径
  2. for /f "delims=\ tokens=5,*" %%a in ('reg query HKLM\SOFTWARE\Microsoft\Office /f "." /k 2^>nul') do (
  3.     for /f "skip=1 tokens=2,* delims= " %%b in ('reg query HKLM\SOFTWARE\Microsoft\Office\%%~a\Word\InstallRoot /v Path 2^>nul') do (
  4.         set "WordPath=%%~c"
  5.     )
  6. )

  7. if defined WordPath (set "WordPath=%WordPath:root\Office16=Office16%") else (
  8. echo 未检测到当前系统安装有 Microsoft Office 软件,请直接关闭或按任意键退出 ......
  9. pause >nul
  10. goto :eof
  11. )

  12. :获取 Microsoft Office 版本
  13. for /f "tokens=4 delims=, " %%i in ('cscript "%WordPath%ospp.vbs" /dstatus') do (set /a n+=1 & if !n! equ 3 set "V=%%i")
  14. if !V! equ 14 set V=2010
  15. if !V! equ 15 set V=2013
  16. if !V! equ 16 set V=2016
  17. if !V! equ 19 set V=2019
复制代码




2#
发表于 2021-1-14 22:03:02 | 只看该作者
简单的判断目录?
%ProgramFiles%\Microsoft Office\Office16
或者
%ProgramFiles(x86)%\Microsoft Office\Office16

点评

网上找到一段代码。通过读取注册表来查找路径,测试过win10系统下能识别出Office2019  详情 回复 发表于 2021-1-21 17:45
回复

使用道具 举报

3#
 楼主| 发表于 2021-1-21 17:45:25 | 只看该作者
caocaofff 发表于 2021-1-14 22:03
简单的判断目录?
%ProgramFiles%\Microsoft Office\Office16
或者

网上找到一段代码。通过读取注册表来查找路径,测试过win10系统下能识别出Office2019
回复

使用道具 举报

4#
发表于 2021-1-29 11:44:38 | 只看该作者
有意思,很久之前我也会一点点批处理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-17 20:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表