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 产品的成本是合理的。
我正在尝试使用以下命令检索 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 产品的成本是合理的。