标题: [注册表类] [已解决]如何写一个批处理文件判断系统中office的版本,谢谢 [打印本页]
作者: btfisher 时间: 2012-6-22 15:47 标题: [已解决]如何写一个批处理文件判断系统中office的版本,谢谢
如题,如何写一个批处理文件判断office的版本,例如没有安装office则提示条件不满足,office2003以下则提示office版本太低,office2003以上则提示条件满足。谢谢了。小弟小白,大侠轻喷
作者: forfiles 时间: 2012-6-22 15:52
用reg query命令检查注册表
HKEY_CURRENT_USER\Software\Microsoft\Office
作者: btfisher 时间: 2012-6-22 15:55
谢谢forfiles,但是,如果没安装office,注册表中上述路径是不存在的,对吗?而且关键的是我想判断出office的版本然后给出不同的动作
作者: forfiles 时间: 2012-6-22 15:56
网上搜到的一个代码- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (8,1,12) do (
- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\%%a.0\Common\LanguageResources /v SKULanguage>nul 2>nul
- if !errorlevel!==0 (
- if %%a==8 (
- set OffiVer=Office 97
- ) else if %%a==9 (
- set OffiVer=Office 2000
- ) else if %%a==10 (
- set OffiVer=Office XP
- ) else if %%a==11 (
- set OffiVer=Office 2003
- ) else if %%a==12 (
- set OffiVer=Office 2007
- ) else (
- set OffiVer=其它
- )
- )
- )
- for /f "tokens=2 delims=x" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Common\LanguageResources /v SKULanguage') do (
- if %%a==409 (
- set OffiLan=英文
- ) else if %%a==2052 (
- set OffiLan=中文
- ) else (
- set OffiLan=其它
- )
- )
- echo Office版本:%OffiVer%
- echo Office语言版本:%OffiLan%
- pause
复制代码
作者: btfisher 时间: 2012-6-22 16:04
再次感谢forfiles,上面的代码我试了一下,在我的本机上不能执行,更准确的说是一闪而过(我的机器装了office2010)。因为自己小白一个,不清楚为什么。还有上面的代码没交代如果客户机没有安装office会怎样,是回馈 “其它”?
作者: forfiles 时间: 2012-6-22 16:40
回复 5# btfisher
开始,运行,regedit
看看这个分支下面是版本是不是13.0
HKEY_CURRENT_USER\Software\Microsoft\Office
作者: btfisher 时间: 2012-6-22 17:26
回复 6# forfiles
哈哈,我本机是14.0,这个正常也能看到。现在的关键是我想做成一个批处理给其他人(客户端,很多)使用检查自己的软件环境,而不能通过手工开始---运行....(你知道我要让客户端都去手工检查的话他们非把我扁死不可)
作者: forfiles 时间: 2012-6-22 17:57
回复 7# btfisher - @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (8,1,14) do (
- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\%%a.0\Common\LanguageResources /v SKULanguage>nul 2>nul
- if !errorlevel!==0 (
- if %%a==8 (
- set OffiVer=Office 97
- ) else if %%a==9 (
- set OffiVer=Office 2000
- ) else if %%a==10 (
- set OffiVer=Office XP
- ) else if %%a==11 (
- set OffiVer=Office 2003
- ) else if %%a==12 (
- set OffiVer=Office 2007
- ) else if %%a==14 (
- set OffiVer=Office 2010
- ) else (
- set OffiVer=没有安装
- )
- )
- )
- echo Office版本:%OffiVer%
- pause
复制代码
作者: btfisher 时间: 2012-6-24 17:48
回复 8# forfiles
感谢,非常感谢!前两天出去了没看见,今天回来看见,感动啊。谢谢您。
作者: btfisher 时间: 2012-6-24 17:48
forfiles,好人啊,谢谢!
作者: forfiles 时间: 2012-6-24 18:15
回复 9# btfisher
每个回帖的右下角有个“评分”,你试试。
作者: 飛雪 时间: 2012-8-23 10:15
如果判斷後還要繼續運行程序的話該怎麼寫?
謝謝
作者: forfiles 时间: 2012-8-24 08:20
回复 12# 飛雪
用if命令做判断
作者: 飛雪 时间: 2012-8-24 08:37
回复 13# forfiles
因為是想要運行載卸程序,但微軟官方有2003、2007、2010
用IF我只能弄出兩個來,煩請指點,謝謝!
作者: 飛雪 时间: 2012-8-24 12:48
例如說我要判斷版本後運行 MicrosoftFixit50154.msi 或 MicrosoftFixit50416.msi 或 MicrosoftFixit50450.msi
作者: forfiles 时间: 2012-8-24 18:11
回复 14# 飛雪
把你用if弄出来的两个贴上来看看,我帮你改成3个。
作者: 飛雪 时间: 2012-8-25 00:54
剛剛測試了一下,if居然是失敗的,真得丟臉了...
大神可否直接幫忙給一個if的辦法
先謝謝了,也藉此多跟大神學習
作者: apang 时间: 2012-8-25 09:29
例如說我要判斷版本後運行 MicrosoftFixit50154.msi 或 MicrosoftFixit50416.msi 或 MicrosoftFixit50450.m ...
飛雪 发表于 2012-8-24 12:48
不知道行不行,试试看:- @echo off&setlocal enabledelayedexpansion
- set v03=MicrosoftFixit50416.msi
- set v07=MicrosoftFixit50154.msi
- set v10=MicrosoftFixit50450.msi
- for %%a in ("11-%v03%" "12-%v07%" "14-%v10%") do (
- for /f "tokens=1,2 delims=-" %%b in ("%%~a") do (
- reg query HKLM\SOFTWARE\Microsoft\Office\%%b.0\Common\LanguageResources /v SKULanguage>nul 2>nul
- if "!errorlevel!"=="0" set flag=1&start /wait "" "%%c"
- )
- )
- if not defined flag echo 未安装 MS Office 2003、2007 或 2010
- pause
复制代码
作者: 飛雪 时间: 2012-8-25 23:59
回复 18# apang
您好,非常感謝您,經測試功能正常!!!
但還有一個小請求,就是當判斷為 2003、2007或2010時能否再多出一個 ECHO 說明現在安裝的版本
謝謝您!
作者: apang 时间: 2012-8-26 09:57
回复 19# 飛雪
试试- @echo off&setlocal enabledelayedexpansion
- set v03=11-2003-MicrosoftFixit50416.msi
- set v07=12-2007-MicrosoftFixit50154.msi
- set v10=14-2010-MicrosoftFixit50450.msi
- for %%a in ("%v03%" "%v07%" "%v10%") do (
- for /f "tokens=1,2* delims=-" %%b in ("%%~a") do (
- reg query HKLM\SOFTWARE\Microsoft\Office\%%b.0\Common\LanguageResources /v SKULanguage>nul 2>nul
- if "!errorlevel!"=="0" (
- set flag=1&echo 版本 MS Office %%c&start /wait "" "%%d"
- )
- )
- )
- if not defined flag echo 未安装 MS Office 2003、2007 或 2010
- pause
复制代码
作者: 飛雪 时间: 2012-8-26 10:22
本帖最后由 飛雪 于 2012-8-26 10:27 编辑
回复 20# apang
非常感謝您,經測試完全正常,再次感謝大神!
如果大神您方便的話,可否好心幫忙加入註解? 非常謝謝您
我的批處理實在還需要加強...
作者: 飛雪 时间: 2012-8-31 14:38
回复 20# apang
抱歉,如果我想在 MicrosoftFixit50154.msi 後面加參數,例如 /s,批處理應當加到哪邊? 謝謝您!
作者: apang 时间: 2012-8-31 15:25
回复 22# 飛雪
set flag=1&echo 版本 MS Office %%c&start /wait "" "%%d" /s
作者: 飛雪 时间: 2012-9-2 00:54
回复 23# apang
真的非常感謝您!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |