无忧启动论坛

标题: 留个纪念:用批获取Microsoft Office的版本号 [打印本页]

作者: 七仙花    时间: 2024-2-12 14:53
标题: 留个纪念:用批获取Microsoft Office的版本号
本帖最后由 七仙花 于 2024-2-12 16:06 编辑
  1. @echo off

  2. echo 获取 Microsoft Office 安装路径
  3. Setlocal Enabledelayedexpansion
  4. for /f "delims=\ tokens=5,*" %%a in ('reg query HKLM\SOFTWARE\Microsoft\Office /f "." /k 2^>nul') do (
  5.     for /f "skip=1 tokens=2,* delims= " %%b in ('reg query HKLM\SOFTWARE\Microsoft\Office\%%~a\Word\InstallRoot /v Path 2^>nul') do (
  6.         set "WordPath=%%~c"
  7.     )
  8. )
  9. if defined WordPath (set "WordPath=%WordPath:root\Office16=Office16%") else (
  10. echo 未检测到当前系统安装有 Microsoft Office 软件,请直接关闭或按任意键退出 ......
  11. pause >nul
  12. goto :eof
  13. )
  14. echo.
  15. echo Microsoft Office 安装路径是:
  16. echo %WordPath%
  17. echo.
  18. echo 获取 Microsoft Office 文件的版本号
  19. echo.
  20. for /f "delims=\ tokens=1-4" %%i in ("%WordPath%") do set "WordPath=%%i\\%%j\\%%k\\%%l\\"

  21. ::显示misc.exe的版本号
  22. wmic datafile where Name="%WordPath%misc.exe" get Version

  23. ::使用wmic获取misc.exe的版本号并赋值给变量

  24. for /F "skip=1 delims= " %%i in ('wmic datafile where "Name='%WordPath%misc.exe'" get Version') do (
  25.           set "V=%%i"
  26.           goto Ver
  27. )
  28. :Ver
  29. echo Microsoft office 的版本号是%V%
  30. echo.
  31. pause
复制代码


稍做修改,也可以获取其它文件的版本号。

作者: 七仙花    时间: 2024-2-12 16:18
本帖最后由 七仙花 于 2024-2-12 16:24 编辑

奇怪,明明编辑的时候,代码是正确的,但保存后第21行代码少了一个反斜杠“\",直接复制帖子里的代码,也是少了一个反斜杠。

编辑时是这样的


保存后是这样的


重新编辑,在最后加多一个反斜杠”\",变成3个反斜杠。


保存后才能显示正确的代码









作者: 七仙花    时间: 2024-2-12 16:28
是论坛的问题,还是我的电脑中毒了,明明回复的时候字是正确的,重新编辑就会有几个字变成乱码了,不做改动直接保存,也是显示乱码。
作者: yc2428    时间: 2024-2-12 17:47
谢谢分享
作者: nathan6498    时间: 2024-2-12 18:52
谢谢分享
作者: shidongzhi    时间: 2024-2-12 19:02
感谢分享
作者: nttwqz    时间: 2024-2-12 19:33
七仙花 发表于 2024-2-12 16:28
是论坛的问题,还是我的电脑中毒了,明明回复的时候字是正确的,重新编辑就会有几个字变成乱码了,不做改动 ...

本坛帖子编辑有不少问题,特别是代码编辑。
作者: AcidBurn    时间: 2024-2-12 22:25
谢谢分享
作者: 风之暇想    时间: 2024-2-12 23:20
传附件吧
作者: in9    时间: 2024-2-13 00:06
谢谢分享,新年快乐!
作者: chenbingwen    时间: 2024-2-13 03:20
谢谢分享
作者: fjjowhs    时间: 2024-2-13 06:30
感谢分享!
作者: 窄口牛    时间: 2024-2-13 09:18
最多能检测到office16,应该重新考虑。
作者: likeyouli    时间: 2024-2-13 09:37
七仙花 发表于 2024-2-12 16:28
是论坛的问题,还是我的电脑中毒了,明明回复的时候字是正确的,重新编辑就会有几个字变成乱码了,不做改动 ...

放心吧, 绝不是你的问题,,我也发现了,http://bbs.wuyou.net/forum.php?m ... p;page=2#pid5129985
ceshi后边少了\



作者: wyjhby    时间: 2024-2-13 09:37
很实用的代码,谢谢分享
作者: 窄口牛    时间: 2024-2-13 09:57
本帖最后由 窄口牛 于 2024-2-13 10:02 编辑

[attach]537734[/attach]


作者: dyc086    时间: 2024-2-13 10:17
谢谢分享
作者: guong    时间: 2024-2-13 13:18

感谢分享
作者: iyg429    时间: 2024-2-13 14:32
如何盘点 office是否被激活 ,我遇到了一个这样的问题,一个人买了一个笔记本 试用了几天 ,然后抹除系统 ,看起来和新的一样 请问我如何判断这个笔记本是否被别人激活了?
作者: yanglinman    时间: 2024-2-14 00:34
感谢分享!
作者: htmlc4    时间: 2024-2-14 04:15
窄口牛 发表于 2024-2-13 09:18
最多能检测到office16,应该重新考虑。

严格来说应该是不支持C2R版本,2016版是最后一版有msi版本的office,之后的office,无论是买断制的2019、2021,抑或是订阅制的365,都只有C2R版本
作者: htmlc4    时间: 2024-2-14 04:19
iyg429 发表于 2024-2-13 14:32
如何盘点 office是否被激活 ,我遇到了一个这样的问题,一个人买了一个笔记本 试用了几天 ,然后抹除系统  ...

预装的office激活是绑定到微软账号上的,而不是绑定到主板
作者: htmlc4    时间: 2024-2-14 04:22

这个批处理有严重缺陷,不支持检测C2R版本的office,2016版是最后一版有msi版本的office,之后的office都是C2R版本的


作者: oh312    时间: 2024-2-14 04:56
赞,谢谢分享。
作者: iyg429    时间: 2024-2-14 15:27
htmlc4 发表于 2024-2-14 04:19
预装的office激活是绑定到微软账号上的,而不是绑定到主板

假如说 别人买了我的笔记本 是全新未激活的 别人进到里面用自己的账号绑定office 然后再回复出厂设置 然后告诉我说 笔记本7天无条件退货 我岂不是无法防止?
作者: htmlc4    时间: 2024-2-14 18:55
iyg429 发表于 2024-2-14 15:27
假如说 别人买了我的笔记本 是全新未激活的 别人进到里面用自己的账号绑定office 然后再回复出厂设置 然 ...

一般来说只要联网激活了就不能7天无理由
作者: 610644034    时间: 2024-2-15 13:43
@echo off
::CMD窗口字体绿色
title %~n0
color 0a
setlocal EnableDelayedExpansion
set "m_Office版本号="
set "m_Office系统位数="
set "m_Office安装目录="

set "m_Office系统位数=64"
call :扫描注册表一级子目录并回调 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office" ":检查激活Office"

set "m_Office系统位数=32"
call :扫描注册表一级子目录并回调 "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office" ":检查激活Office"
echo.
pause
goto :eof



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:检查激活Office
set "m_Office版本号="
set "m_Office安装目录="
set "m_ospp文件目录="

call :查询注册表一个数值 "m_Office安装目录" "%~1\Common\InstallRoot" "Path"
if "" EQU "!m_Office安装目录!" call :查询注册表一个数值 "m_Office安装目录" "%~1\Excel\InstallRoot" "Path"
if "" EQU "!m_Office安装目录!" call :查询注册表一个数值 "m_Office安装目录" "%~1\Word\InstallRoot" "Path"
if "" NEQ "!m_Office安装目录!" if exist "!m_Office安装目录!" (
        for %%a in ( "%~1" ) do set "m_Office版本号=%%~na"
        if "\" EQU "!m_Office安装目录:~-1!" set "m_Office安装目录=!m_Office安装目录:~0,-1!"
        set "m_ospp文件目录=!m_Office安装目录!"

        cd /d "!m_Office安装目录!"
        if not exist "!m_Office安装目录!\ospp.vbs" (
                set "m_ospp文件目录="
                cd /d "..\..\Office!m_Office版本号!"
                if exist "ospp.vbs" for /f "delims=*" %%a in ( 'cd' ) do set "m_ospp文件目录=%%a"
        )

        echo.
        echo --------------------------------------------------------
        echo 准备激活:!m_Office系统位数!位 Office 20!m_Office版本号!
        echo 系统位数:!m_Office系统位数!
        echo 安装版本:!m_Office版本号!
        echo 安装路径:!m_Office安装目录!
        echo ospp文件目录:!m_ospp文件目录!

        if not exist "!m_ospp文件目录!\ospp.vbs" (
                echo 无法找到激活文件:ospp.vbs 在目录:!m_ospp文件目录!
                echo 激活失败!
                goto :eof
        )

        if "16" EQU "!m_Office版本号!" (
                call :安装2016证书
                call :安装2019证书
                call :安装2021证书
        )>nul 2>nul
        if "19" EQU "!m_Office版本号!" ( call :安装2019证书 )>nul 2>nul
        if "21" EQU "!m_Office版本号!" ( call :安装2021证书 )>nul 2>nul

        call :设置KMS服务器并激活
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:扫描注册表一级子目录并回调
rem :扫描注册表一级子目录并回调 "in"       "in"
rem :参数列表                   注册表路径 回调标签

( Reg Query "%~1" )>nul 2>nul || (
    goto :eof
)

rem if 0 NEQ %errorlevel% (
rem     goto :eof
rem )

if "" EQU "%~2" for /f "delims=*" %%a in ( 'Reg Query "%~1" ' ) do if "" NEQ "%%a" call :扫描注册表一级子目录并回调_001 "%%a" "%~1"
if "" NEQ "%~2" for /f "delims=*" %%a in ( 'Reg Query "%~1" ' ) do if "" NEQ "%%a" call :扫描注册表一级子目录并回调_002 "%%a" "%~1" "%~2"
goto :eof

:扫描注册表一级子目录并回调_001
echo x%~1 | findstr /i "%~2" >nul 2>nul && echo %~1
goto :eof
:扫描注册表一级子目录并回调_002
echo x%~1 | findstr /i "%~2" >nul 2>nul && call %~3 "%~1"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:查询注册表一个数值
rem :查询注册表一个数值 "inout_ptr"       "in"       "in"   
rem :参数列表            输出的数值变量名 注册表路径 [注册表数值名,如果空则查询默认值]

( Reg Query "%~2" )>nul 2>nul || (
    goto :eof
)

if "" NEQ "%~1" set "%~1="
if "" NEQ "%~3" (
    for /f "delims=*" %%a in ( 'Reg Query "%~2" /v "%~3" ' ) do if "" NEQ "%%a" if "" NEQ "%~1" (
        set "查询注册表一个数值_临时变量=%%a"
        set "查询注册表一个数值_临时变量=!查询注册表一个数值_临时变量:    %~3    =!"
        for /f "tokens=1,* delims= " %%b in ( "!查询注册表一个数值_临时变量!" ) do set "查询注册表一个数值_输出数值=%%c"
        set "%~1=!查询注册表一个数值_输出数值!"
    )
    goto :eof
)>nul 2>nul

for /f "delims=*" %%a in ( 'Reg Query "%~2" /ve ' ) do if "" NEQ "%%a" if "" NEQ "%~1" (
        set "查询注册表一个数值_临时变量=%%a"
        set "查询注册表一个数值_临时变量=!查询注册表一个数值_临时变量:    %~3    =!"
        for /f "tokens=1,* delims= " %%b in ( "!查询注册表一个数值_临时变量!" ) do set "查询注册表一个数值_输出数值=%%c"
        set "%~1=!查询注册表一个数值_输出数值!"
)>nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
作者: shinykers    时间: 2024-2-15 14:06
谢谢分享~批处理还是很强大的存在啊~
作者: dos时代菜鸟    时间: 2024-2-15 19:42
本帖最后由 dos时代菜鸟 于 2024-2-15 20:03 编辑

如果是 64为系统 安装了 32位的office 注册表位置就会不一样了。HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office 了解下


OFFICE_信息.7z (1.27 KB, 下载次数: 7)



作者: 享β亻寸木东    时间: 2024-2-18 11:08
能获取品牌机自带office家庭学生版序列号吗?
作者: htmlc4    时间: 2024-2-18 19:00
享β亻寸木东 发表于 2024-2-18 11:08
能获取品牌机自带office家庭学生版序列号吗?

激活之后自动绑定到微软账户上,没必要刻意提取
作者: 2012myjoys    时间: 2024-2-20 18:40
没有发现office版本号

实际是2021


作者: 2012myjoys    时间: 2024-2-20 18:47
dos时代菜鸟 发表于 2024-2-15 19:42
如果是 64为系统 安装了 32位的office 注册表位置就会不一样了。HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ ...

奇怪,用你的附件也是检查不出来



作者: dos时代菜鸟    时间: 2024-2-21 09:29
2012myjoys 发表于 2024-2-20 18:47
奇怪,用你的附件也是检查不出来

啥系统?咋安装的 office ? office 啥版本?

啥也不说,没得玩儿。
作者: 2012myjoys    时间: 2024-2-21 19:10
dos时代菜鸟 发表于 2024-2-21 09:29
啥系统?咋安装的 office ? office 啥版本?

啥也不说,没得玩儿。

office2021
正常安装的
作者: dos时代菜鸟    时间: 2024-2-21 20:24
2012myjoys 发表于 2024-2-21 19:10
office2021
正常安装的

windows 是啥新系统?xp win7 win8 win10
office 是精简版,还是完整版。

哎,其实搞这个也没多大用处。

要激活,各种脚本多的是。
作者: 2012myjoys    时间: 2024-2-22 13:41
dos时代菜鸟 发表于 2024-2-21 20:24
windows 是啥新系统?xp win7 win8 win10
office 是精简版,还是完整版。

微软原版Windows11专业版
微软官网下载的office2021
作者: dos时代菜鸟    时间: 2024-2-22 17:53
2012myjoys 发表于 2024-2-22 13:41
微软原版Windows11专业版
微软官网下载的office2021

配置太高端,乞丐没玩儿过。
作者: bsdgsos    时间: 2024-2-22 18:55
收藏了




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3