【问题标题】:Batch script to get Office Version 2019获取 Office 版本 2019 的批处理脚本
【发布时间】:2021-09-09 02:38:26
【问题描述】:

我一直在使用其他人分享的代码,我想感谢他们,但我不知道是谁做的。 但是我的代码运行良好,可以让我获得所有 Office 版本,但我无法让它执行 Office 2019。

我希望有人知道要添加的额外行以使其正常工作....

当我在 2019 年之前运行它时,它很好。但在 2019 年,它又与 Desktop 一起回归。

    cls
@echo off

setlocal enableDelayedExpansion
for /f "tokens=2 delims==" %%O in ('ftype ^|findstr /r /I "\\OFFICE[0-9]*" 2^>nul') do (
    set "verp=%%~O"
    goto :end_for
)
:end_for

for %%P in (%verp%) do (
    set "off_path=%%~dpP"
    for %%V in ("!off_path:~0,-1!") do (

     set "office_version=%%~nV"
     goto :end_for2
    )
)
:end_for2

if [%office_version%] == [] echo No Office installed & goto end
echo %office_version%

:end
endlocal

pause

@
TimeOut /t 5 1>Nul

pause

【问题讨论】:

  • 我们中的很多人可能还没有使用 Office 2019,因此如果您可以帮助我们调试您的代码,让我们知道每个 for 命令的输出以及分配给每个命令的内容,这将有所帮助变量。

标签: batch-file version


【解决方案1】:

我很想知道以下改编后的代码输出什么。它是为早期版本的 Office 编写的,我猜测了对最新版本要进行哪些更改。

@Echo Off & Setlocal EnableExtensions DisableDelayedExpansion
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0" & Exit /B)
Set /A "OSA=MWB=%PROCESSOR_ARCHITECTURE:~-2%"
If %OSA% Equ 86 Set "MWB=32"
Set "REG=%__AppDir__%reg.exe"
Call :Chk
If Not Defined MOB If %MWB% Equ 64 Call :Chk \Wow6432Node
If Not Defined MOB (Echo Microsoft Office product not installed & GoTo EndIt
) Else If Not Defined IOV (Echo Unable to determine Microsoft Office version
    GoTo EndIt)
Echo %MWB%-bit OS with an Office %IOV% %MOB%-bit product installed in %OIL%

:EndIt
Setlocal EnableDelayedExpansion & For /F "Tokens=1,2" %%G In ("!CMDCMDLINE!"
) Do Endlocal & If /I "%%~nG" == "cmd" If /I "%%~H" == "/c" Pause
GoTo :EOF

:Chk
Set "GUID=" & Set "IOV=" & Set "MOB=" & Set "OIL="
Set "Key=HKLM\Software%1\Microsoft\Windows\CurrentVersion\Uninstall"
For /F Delims^= %%G In ('%REG% Query "%Key%" /K /F "*-001B-*0FF1CE}" 2^>NUL'
) Do Set "GUID=%%~nxG" & GoTo Next

:Next
If Not "%GUID:~-1%"=="}" Set "GUID="
If Not Defined GUID Exit /B
Set "MOB=32" & If "%GUID:~20,1%" == "1" Set "MOB=64"
If "%GUID:~4,1%" == "2" Set "IOV= 2007"
If "%GUID:~4,1%" == "4" Set "IOV= 2010"
If "%GUID:~4,1%" == "5" Set "IOV= 2013"
If "%GUID:~4,1%" == "6" Set "IOV= 2016"
If "%GUID:~4,1%" == "7" Set "IOV= 2019"
For /F Tokens^=2* %%G In ('%REG% Query "%Key%\%GUID%" /V "InstallLocation"
 2^>NUL') Do Set "OIL=%%H"
If Not Defined OIL Set "OIL=an unknown location"
Exit /B

*请注意,这旨在将数据用于 Microsoft Word,因为我决定安装 Office 的每个人都将始终安装 Word。因此,它应该适用于 Word 2007 及以后的任何 Office 版本(将 Word 作为组件安装)。

【讨论】:

  • Compo 感谢您的脚本和建议。当我运行脚本时,它返回时没有安装任何 Microsoft 产品。
  • 感谢您的尝试,@doheth,您能否报告以下两个命令的输出,这两个命令都是从命令提示符窗口运行的? %SystemRoot%\System32\reg.exe Query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /K /F "*-*0FF1CE}" /Reg:64%SystemRoot%\System32\reg.exe Query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /K /F "*-*0FF1CE}" /Reg:32
  • @combo L:\>%SystemRoot%\System32\reg.exe 查询 "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /K /F "*-*0FF1CE}" /Reg :64 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{90160000-007E-0000-1000-0000000FF1CE} HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{90160000-008C-0000-1000-0000000FF1CE} HKEY Software\Microsoft\Windows\CurrentVersion\Uninstall\{90160000-008C-0409-1000-0000000FF1CE} HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{90160000-008C-0411-1000-0000000FF1CE}
  • GUID 编号方案似乎发生了变化,所以我将不得不做一些研究来确定事情何时以及如何发生变化。对于您从我当前的信息中提供的内容,您拥有 Office 2016 产品的 64 位 RTM 批量许可版本,很可能是 en-US 和 ja-JP 语言。目前可用的信息似乎很少,所以我可能需要一些时间才能弄清楚这一切,而且我可能不得不几乎完全重写我的代码。如果您可以将这三个键中的注册表值和数据上传到某处以供我评估,它将对我有所帮助。
猜你喜欢
  • 2020-03-20
  • 2011-08-06
  • 1970-01-01
  • 2016-12-23
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多