【问题标题】:Parse result of batch script output in windows解析windows中批处理脚本输出的结果
【发布时间】:2017-03-07 23:45:41
【问题描述】:
我正在尝试使用以下命令检索 Microsoft Office 版本:
reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"
这将返回以下输出:
HKEY_CLASSES_ROOT\Word.Application\CurVer
(Default) REG_SZ Word.Application.15
我需要解析输出并使用下表匹配版本并将最终版本粘贴到文本文件中。
Office 97 - 7.0
办公 98 - 8.0
Office 2000 - 9.0
Office XP - 10.0
Office 2003 - 11.0
Office 2007 - 12.0
Office 2010 - 14.0
办公室 2013 - 15.0
办公室 2016 - 16.0
我该怎么办?
【问题讨论】:
标签:
windows
batch-file
ms-office
【解决方案1】:
我在您之前关于 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 产品的成本是合理的。
【解决方案2】:
@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,它只能安装在无法使用 reg 命令的 windows xp(甚至旧版本的 windows)上。所以你也可以查看this使用FTYPE命令来判断office版本