Board logo

标题: [注册表类] 求个读取注册表的批处理 [打印本页]

作者: 我来了    时间: 2013-7-23 16:46     标题: 求个读取注册表的批处理

求个读取注册表的批处理




想做个批处理,可以运行当前电脑的office的word
已知office安装目录在注册表的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot
(03版是11.0,其他版本是12、13、14)
弄了很久,没弄好...
碰到2个问题
1、读取后有个空格,因为很多时候都是装c的Program Files,这里有个空格问题。。。
2、需要做个判断,从11.0开始,一直判断到14.0,也就是说无论安装了几个版本,只启动最低版本的那个
后一个应该不难,前一个完全没有头绪,因为读出来是带空格的,对于批处理的变量处理理解不深,头疼
作者: xxpinqz    时间: 2013-7-23 17:18

本帖最后由 xxpinqz 于 2013-7-23 17:19 编辑
  1. @echo off
  2. set "str1=HKLM\SOFTWARE\Microsoft\Office"
  3. set "str2=\Word\InstallRoot"
  4. for /f "delims=" %%a in ('reg query "%str1%"^|findstr "1[1-4]\.0$"')do (
  5.    if not defined dst (
  6.       for /f "tokens=2*" %%b in ('reg query "%%a%str2%" /v path 2^>nul')do (
  7.             set "dst=%%c"
  8.       )
  9.    )
  10. )
  11. echo,%dst%
  12. pause
复制代码

作者: CrLf    时间: 2013-7-23 18:03

本帖最后由 CrLf 于 2013-7-23 18:04 编辑

我更喜欢根据相关后缀名的关联路径来获取各种软件安装路径,举个栗子:
  1. @echo off
  2. for /f "tokens=2 delims==" %%a in ('assoc .doc') do (
  3.   for /f "tokens=1* delims==" %%b in ('ftype %%a') do (
  4.     for %%z in (%%c) do set word=%%z&goto next
  5.   )
  6. )
  7. :next
  8. echo;word 路径为:%word%
  9. pause&exit
复制代码

作者: PowerShell    时间: 2013-7-23 19:36

本帖最后由 PowerShell 于 2013-7-23 19:40 编辑

先定义一个函数,叫【做我也来了呵呵】,然后运行之即可。
powershell code:
  1. function  我也来了呵呵
  2. {
  3. $word路径 = ( Get-ItemProperty  -Path HKLM:\SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot  -Name path).path + "\winword.exe"
  4. if  (test-path $word路径)
  5. {
  6. Start-Process  $word路径
  7. break
  8. }
  9. $word路径 = ( Get-ItemProperty  -Path HKLM:\SOFTWARE\Microsoft\Office\12.0\Word\InstallRoot  -Name path).path + "\winword.exe"
  10. if  (test-path $word路径)
  11. {
  12. Start-Process  $word路径
  13. break
  14. }
  15. $word路径 = ( Get-ItemProperty  -Path HKLM:\SOFTWARE\Microsoft\Office\13.0\Word\InstallRoot  -Name path).path + "\winword.exe"
  16. if  (test-path $word路径)
  17. {
  18. Start-Process  $word路径
  19. break
  20. }
  21. $word路径 = ( Get-ItemProperty  -Path HKLM:\SOFTWARE\Microsoft\Office\14.0\Word\InstallRoot  -Name path).path + "\winword.exe"
  22. if  (test-path $word路径)
  23. {
  24. Start-Process  $word路径
  25. }
  26. }
  27. 我也来了呵呵
复制代码
$word路径
C:\Program Files\Microsoft Office\Office14\\winword.exe
能用,最后一段代码运行正常通过。能启动我机子上的word
作者: DAIC    时间: 2013-7-23 20:39

回复 4# PowerShell


    教主,PowerShell不是应该比BAT简单很多吗,点解你的代码比人家的长几倍?这让我们信徒好生失望的,有木有?!
作者: 我来了    时间: 2013-7-23 22:06

谢谢  哥哥们,给力,帮别人问的。
感谢你们。
那么多论坛也就觉得编程的,批处理的,wuyou,pediy这类的能学到些真东西。
作者: PowerShell    时间: 2013-7-25 19:46

回复 5# DAIC

呵呵,我powershell宗,又分语法研究分舵,和库钻研分舵,这个我已经说过很多次了。

python致力于提供最简单,容易理解的代码,我也是这样想的。所以,我算是powershell宗,语法分舵,【语法简单明了旗】的一员。
我旗之代码,讲求语法用标准命令,尽量不用简写,一般有很多中文变量,中文注释,代码极易菜鸟理解,极易他人修改,即使n年后,也很容易查找修改,每行代码实现一个小功能。
powershell是新出的语言,功能完备,写起脚本来,本身就比老的脚本语言要直观些的。  
而且我认为一个10行的脚本,和同功能的200行的脚本,电脑执行起来,速度不会有太大差别。总之,我们【语法简单明了旗】致力于迁就人,迁就菜鸟。


但是我宗,语法分舵,【宁可语法奇葩,也要语句长度最短旗】就是相反的了。
这些长老搞的语句极短,大都在一行之内,能简写的命令绝不全写,管你看得懂看不懂呢?  
代表的有perl语言。

呵呵,大多数脚本语言的,语法分舵,大都有这样的分化。

最后,我想问你的是,我这代码虽长,却容易理解对么? 你能理解么?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2