[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 怎样从多个注册表键准确高效查找较新的Office安装路径和版本号?

本帖最后由 aries215 于 2017-3-3 18:49 编辑

因为部分人可能不是默认路径安装,所以不能用 for /d %%a in ("%ProgramFiles%\Microsoft Office\O*")

只能通过注册表查询:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\<version>\Common\InstallRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\<version>\Common\InstallRoot
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun

Office 2007: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\
Office 2010: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\
Office 2013: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\15.0\
Office 2016: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\16.0\
......

如何自动准确获取版本号和路径,且运算量很小?

谢谢!

本帖最后由 aries215 于 2017-2-27 15:54 编辑

回复 2# GNU
谢谢回复!运算量确实很小 :-)

Office16以后还会有新版本,我就是觉得限定为12~16不够,否则还不如手工指定省事。

我发现这样可以直接查询含版本号的注册表键:
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f "delims=\ tokens=5,*" %%a in ('reg query HKLM\SOFTWARE\Microsoft\Office /f "." 2^>nul') do (
  4.     set "_ver=%%~a"
  5.     echo !_ver!
  6. )
  7. pause
复制代码
还有,/k 指定只在项名称中搜索,怎么用?

TOP

本帖最后由 aries215 于 2017-2-25 14:07 编辑

请问,2>nul 有什么作用?没看到差别哦

另外,在旧版Office基础上安装,印象中是删除旧版再安装吧?

TOP

回复 6# GNU
这样演示很清楚,原来此命令要放在最后,怪不得我总出错。
你懂得很多,也好热心啊!谢谢!

TOP

回复 4# aries215
>nul 和 2>nul 需要叠加才完美吗?
单用 2>nul 能不能彻底屏蔽信息?

TOP

本帖最后由 aries215 于 2017-2-25 18:19 编辑

回复 10# GNU
很有道理,尽量要按照帮助手册来使用。
谢谢!

TOP

本帖最后由 aries215 于 2017-2-26 00:33 编辑

回复 13# /zhqsystem/zhq
谢谢回复!
你说的“未精简版系统”,是指wmic要能正常运行吗?没问题,NT6各组件关联性挺强,绝大部分人不再苛求系统体积了。
不过,我运行你的命令,不管是补上1个% 还是删掉那个%,都提示没有可用实例。只能标准安装才有用?
Office 精简版,我在RAMOS上用,安装批处理都会写入上述注册表键值,代码的通用性很好啊。
Office2007 之后的,没有上述键值不能运行的,我没见过不写注册表的纯净版哦。
另外,我发现wmic的路径结果很难被 if 使用,显示没问题,真难用。

TOP

本帖最后由 aries215 于 2017-2-26 17:34 编辑

回复 15# GNU
奇哉怪也,我复制你的代码运行,仍然提示没有可用实例。运行一次Excel也不行。
我测试是在精简版系统,wmic功能完整;Office也是3in1绿化精简版,在无忧找的,但会写入很多注册表键值,包含1楼的项目。

TOP

本帖最后由 aries215 于 2017-2-26 18:06 编辑

回复 16# GNU
运行后,一共弹出3个CMD窗口,加了双引号就2个CMD窗口,路径怎么会不正确?谢谢!
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f "skip=1 delims==" %%a in ('wmic process where name^="notepad.exe" get executablepath') do (
  4. set "_var=%%~a"
  5. echo,!_var!
  6. start "!_var!"
  7. )
  8. pause
复制代码

TOP

回复 18# WHY
此代码可用,挺高深的。

TOP

本帖最后由 aries215 于 2017-2-26 18:25 编辑

回复 22# GNU
真厉害!
wmic 很多结果都要用 findstr 比较好吗?
我还有很多东西要学习!

TOP

本帖最后由 aries215 于 2017-2-26 19:52 编辑

回复 22# GNU
好吧,问题基本解决,非常感谢楼上各位热心帮助。我继续学习。

TOP

回复 26# GNU
原来如此,谢谢

TOP

返回列表