如何使用批处理文件知道 Windows 上是否安装了 MS Office 以及安装了哪个版本?

如何使用批处理文件知道 Windows 上是否安装了 MS Office 以及安装了哪个版本?

我想问一下,批量了解 Windows 上是否安装了 Office 的最佳方法是什么?

因此,我创建了这个批处理文件来知道安装了哪个 Word 版本!

我的问题 : 您是否知道还有其他批处理方法可以查明 Windows 上是否安装了 Office 以及安装了哪个版本?


@echo off
Title Check if Word Office is installed or Not ? And Which Version Number ?
@for /f "skip=2 tokens=3 delims=." %%a in (
    'reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer" /f App*'
) do (
    Set "VerNumber=%%a.0"
)
SetLocal EnableDelayedExpansion
If defined VerNumber (
    If [!VerNumber!] EQU [11.0] (Set "MSOffice=Office 2003")
    If [!VerNumber!] EQU [12.0] (Set "MSOffice=Office 2007")
    If [!VerNumber!] EQU [14.0] (Set "MSOffice=Office 2010")
    If [!VerNumber!] EQU [15.0] (Set "MSOffice=Office 2013")
    If [!VerNumber!] EQU [16.0] (Set "MSOffice=Office 2016+")
    Color 0B & echo Word Application is installed ("!MSOffice!"^) (VerNumber="!VerNumber!"^)
) else ( 
    Color 0C & echo Word Application is not installed ! & Timeout /T 3 /Nobreak>nul & Exit /B
)
EndLocal
Pause & Exit /B

答案1

评论中链接的问题仅针对已安装的 Office 版本进行回答,但并未真正尝试回答未安装版本的情况

在我的测试中,即使您没有安装 Office,您的变量也始终会被设置....

For /f在循环中添加2>nul重定向器,循环将不会返回任何定义变量的字符串......

if defined没有工作....

@echo off
Title Check if Word Office is installed or Not ? And Which Version Number ?
@for /f "skip=2 tokens=3 delims=." %%a in (
    '2^>nul reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer" /f App*'
) do (
    Set "VerNumber=%%a.0"
)
SetLocal EnableDelayedExpansion
If defined VerNumber (
    If [!VerNumber!] EQU [11.0] (Set "MSOffice=Office 2003")
    If [!VerNumber!] EQU [12.0] (Set "MSOffice=Office 2007")
    If [!VerNumber!] EQU [14.0] (Set "MSOffice=Office 2010")
    If [!VerNumber!] EQU [15.0] (Set "MSOffice=Office 2013")
    If [!VerNumber!] EQU [16.0] (Set "MSOffice=Office 2016+")
    Color 0B & echo Word Application is installed ("!MSOffice!"^) (VerNumber="!VerNumber!"^)
) else ( 
    Color 0C & Timeout /T 3 /Nobreak | echo Word Application is not installed^^! & Exit /B
)
EndLocal
Pause & Exit /B

相关内容