我想问一下,批量了解 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