批处理文件代码来检测32位和64位办公室不起作用

时间:2020-01-12 02:09:16

标签: batch-file 64-bit 32-bit

我正在尝试将一个批处理文件放在一起,以便在用户运行时选择适当的可执行文件位版本。我在stackoverflow上找到了以下代码: Batch file check office architecture version 问题是,当我将其粘贴到桌面上的文本文件中并在安装了64位Office 2010的虚拟机中将其重命名为.bat时,它不起作用:它声称它是32位(默认值是在编码。我不擅长检查注册表项,所以我想知道在某个实际可行的地方是否没有现成的版本。我也想知道为什么没有简单的方法来确定这一点。我以为这是Microsoft可以使开发人员轻松访问的东西。

1 个答案:

答案 0 :(得分:0)

如果要检查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

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

对于您对问题的任何添加/更改,我都不会修改此代码,也不会出于目的之外的其他目的提供修改帮助。

相关问题