windows 中批处理脚本输出的解析结果

Parse result of batch script output in windows

我正在尝试使用以下命令检索 Microsoft Office 版本:

reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"

这个returns下面的输出:

HKEY_CLASSES_ROOT\Word.Application\CurVer

   (Default)    REG_SZ    Word.Application.15

我需要使用以下内容解析输出并匹配版本 table 并将最终版本粘贴到文本文件中。

Office 97 - 7.0
Office 98 - 8.0
Office 2000 - 9.0
Office XP - 10.0
Office 2003 - 11.0
Office 2007 - 12.0
Office 2010 - 14.0
Office 2013 - 15.0
Office 2016 - 16.0

我该怎么做?

@echo off

for /f "tokens=5* skip=1 delims=. " %%a in ('reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"') do set "wver=%%a.0"


for %%# in ("Office 97-7.0" "Office 98-8.0" "Office 2000-9.0" "Office XP-10.0" "Office 2003-11.0" "Office 2007-12.0" "Office 2010-14.0"  "Office 2013-15.0" "Office 2016-16.0") do (

    for /f "tokens=1* delims=-" %%a in ("%%~#") do (

        if %%b equ %wver%  ( 
            set ov=%%a
        )
    )
)

echo %ov%

但是您的 MS Office 版本非常旧,只能安装在 windows xp(甚至更旧版本的 windows)上,其中 reg 命令不可用.所以你也可以查看this,它使用FTYPE命令来确定office版本

我在您之前在 Outlook 上的问题虽然看似被忽略中提供了类似的答案。

可能有一种使用注册表的方法,(尽管仅适用于 Office 2007 及更高版本):

@Echo Off

If "%PROCESSOR_ARCHITECTURE:~-2%"=="86" (If Defined PROCESSOR_ARCHITEW6432 (
        Set "KEY=\Wow6432Node" & Set "MWB=64") Else (Set "MWB=32" & Set "MOB=32"
    )) Else Set "MWB=64"
Set "KEY=HKLM\Software%KEY%\Microsoft\Windows\CurrentVersion\Uninstall" 

Set "GUID="
For /F "Delims=" %%A In ('Reg Query %KEY% /K /F "*-001B-*0FF1CE}"') Do (
    If Not Defined GUID Set "GUID=%%~nxA")
If Not "%GUID:~-1%"=="}" Set "GUID="
If Not Defined GUID (Echo= Unable to find Office Product & GoTo EndIt)

If %GUID:~4,1% Equ 4 Set "IOV=10" Else (If %GUID:~4,1% Equ 2 (Set "IOV=07"
    If Not Defined MOB Set "MOB=32") Else (If %GUID:~4,1% Equ 5 (Set "IOV=13"
        ) Else (If %GUID:~4,1% Equ 6 Set "IOV=16")))

If Not Defined IOV (Echo= Unknown Office version on your %MWB%-bit OS
    GoTo EndIt)

If Not Defined MOB Set "MOB=32"
If %GUID:~20,1% Equ 1 Set "MOB=64"

Echo=&Echo= Office 20%IOV% %MOB%-bit Product installed on a %MWB%-bit OS

:EndIt
Timeout 5 1>Nul

这还没有经过测试,因为我一直无法证明任何 Microsoft Office 产品的成本是合理的。