用于检测 32 位与 64 位办公室不工作的批处理文件代码

batch file code to detect 32-bit vs 64-bit office not working

我正在尝试整理一个批处理文件,当用户 运行 时,该文件将 select 适当的可执行文件位版本。我在 Whosebug 上找到了这段代码: 问题是当我将它粘贴到桌面上的文本文件并在安装了 64 位 Office 2010 的虚拟机中将其重命名为 .bat 时它不起作用:它声称它是 32 位,默认值设置在代码。不擅长检查注册表项,我想知道是否有一个实际可用的现成版本。我也想知道为什么没有一种简单的方法来确定这一点。我原以为微软会让开发人员轻松访问它。

如果您想检查 Microsoft Office 的位数、版本和安装位置,您可以测试一下这个脚本,看它是否更适合您:

@Echo Off
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
Set /A "OSA=MWB=%PROCESSOR_ARCHITECTURE:~-2%"
If %OSA%==86 Set "MWB=32"
Set "MOB="&Set "GUID="&Set "REG=%__AppDir__%reg.exe"
Call :Chk
If Not Defined MOB If %MWB%==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 20%IOV% %MOB%-bit product installed in %OIL%
:EndIt
>Nul Timeout -1
GoTo :EOF

:Chk
Set "MOB="&Set "GUID="&Set "OIL="
Set "Key=HKLM\Software%1\Microsoft\Windows\CurrentVersion\Uninstall"
For /F Delims^= %%A In ('""%REG%" Query "%Key%" /K /F "*-001B-*0FF1CE}""'
)Do Set "GUID=%%~nxA"&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=07"
If "%GUID:~4,1%"=="4" Set "IOV=10"
If "%GUID:~4,1%"=="5" Set "IOV=13"
If "%GUID:~4,1%"=="6" Set "IOV=16"
If Not Defined IOV Exit /B
For /F Tokens^=2* %%A In ('""%REG%" Query "%Key%\%GUID%" /V "InstallLocation""'
)Do Set "OIL=%%B"
Exit /B

但是请注意,此脚本旨在与 Windows Microsoft Office 产品一起使用,从版本 20072016(含)。该脚本仅检查 Microsoft Word 的特定卸载密钥,(假定只有在极少数情况下才会有人安装 Office 而不包括 Word 产品),并且不能保证所有版本都将使用相同的卸载密钥。

我不会针对您的问题 additions/changes 修改此代码,也不会为非预期目的的修改提供帮助。