找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 小智BAT

[注册表类] 【已解决】批处理怎么读取注册表字符串值名称并只取两个不同的输出

[复制链接]
 楼主| 发表于 2014-10-5 20:50:33 | 显示全部楼层
回复 15# Batcher


    好奇怪,用iBAT调试时出错,双击运行没事,正常。不知道什么原因。
 楼主| 发表于 2014-10-6 01:16:11 | 显示全部楼层
本帖最后由 小智BAT 于 2014-10-6 01:31 编辑

回复 12# terse


    你好,很感谢你为我解决问题,但现在我遇到一个问题就是我要输出的是前一个目录,该如何实现?

例如我安装目录改为d盘的文件夹时,字符串的值不再有WFOActive。但是有固定的“V4用户认证”,当我得到路径时那该如何返回上级目录并输出?

如得出C:\Program Files (x86)\WFOActive\V4用户认证\目录,我要的是上级目录C:\Program Files (x86)\WFOActive\,但这个目录是变动的

可也是D:\Program Files (x86)\WFOActive、也可以是F:\新建文件夹。求解决。
发表于 2014-10-6 10:48:50 | 显示全部楼层
本帖最后由 terse 于 2014-10-6 11:17 编辑

字符给吃了 换个方法试
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=V4用户认证"
  3. set "reg=reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"
  4. set "find=findstr/i \\%s%\\.*REG_SZ
  5. for /f "tokens=*" %%i in ('%reg% 2^>nul^|%find%') do (
  6.     set "var=%%i"
  7.     set var=!var:\%s%\=^

  8. !
  9.     for /f "delims=" %%a in ("!var!") do if not defined str set "str=%%a"
  10. )
  11. if not defined str (echo,没有%s%目录)else echo,%str%
  12. pause
复制代码
发表于 2014-10-6 16:12:34 | 显示全部楼层
回复 16# 小智BAT


    你把这个问题反馈给iBAT的作者看看吧
 楼主| 发表于 2014-10-7 07:48:11 | 显示全部楼层
回复 18# terse

你好,麻烦再解决下这个问题。非常感谢你。。。
    如果注册表有字符串值
D:\新建文件夹\WFOActive
D:\新建文件夹\WFOActive\V4用户认证
C:\Program Files (x86)\WFOActive
C:\Program Files (x86)\WFOActive\V4用户认证
我要把“C:\Program Files (x86)\WFOActive\V4用户认证”和“D:\新建文件夹\WFOActive\V4用户认证”的上一级目录都输出,该怎么解决?
发表于 2014-10-7 19:13:06 | 显示全部楼层
本帖最后由 terse 于 2014-10-7 19:48 编辑

回复 20# 小智BAT
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=V4用户认证"
  3. set "reg=reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"
  4. set "find=findstr/i \\%s%\\.*REG_SZ
  5. for /f "tokens=*" %%i in ('%reg% 2^>nul^|%find%') do (
  6.     set "var=%%i"
  7.     set var=!var:\%s%\=\%s%^

  8. !
  9.     for /f "delims=" %%a in ("!var!") do (
  10.         if /i "%%~nxa" == "%s%" set /an+=1&set "$!n!=%%~dpa"
  11.     )
  12. )
  13. if not defined n (echo,没有%s%目录)else for /l %%i in (1,1,!n!) do echo,!$%%i!
  14. pause
复制代码
 楼主| 发表于 2014-10-7 19:24:46 | 显示全部楼层
回复 21# terse


    是可以输出了。那该如何取得它们的上一级目录呢?
 楼主| 发表于 2014-10-7 19:41:24 | 显示全部楼层
回复 21# terse


  能不能把两显示的分别以
echo %a%
echo %b%
显示吗,因为我要定义set waya=%a% set wayb=%b%

这个可以现实吗?
发表于 2014-10-7 19:49:53 | 显示全部楼层
回复 23# 小智BAT
你举例2个变量 如果是三个或三个以上呢 上面修正为 $1  - $n
 楼主| 发表于 2014-10-7 19:56:04 | 显示全部楼层
回复 24# terse


    最多两个,一般不会有第三个变量出现,能不能定义为:a ,b分别输出啊?

我是小白,不会拆分你的代码。。。。
 楼主| 发表于 2014-10-7 20:13:51 | 显示全部楼层
回复 24# terse


    如果是多个是可以定义为way1=,way2,way3.。。。。。
可以这样的吗?不过我着一般只是出现2个,不会有第三个的。
 楼主| 发表于 2014-10-7 20:29:52 | 显示全部楼层
回复 24# terse


    已经确定是两个变量了。不会存在第三个了,请大神给个再给个方案。万分感谢!!
发表于 2014-10-7 21:01:07 | 显示全部楼层
回复 27# 小智BAT
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=V4用户认证"
  3. set "reg=reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"
  4. set "find=findstr/i \\%s%\\.*REG_SZ
  5. for /f "tokens=*" %%i in ('%reg% 2^>nul^|%find%') do (
  6.     set "var=%%i"
  7.     set var=!var:\%s%\=\%s%^

  8. !
  9.     for /f "delims=" %%a in ("!var!") do (
  10.         if /i "%%~nxa" == "%s%" (
  11.            if not defined a (set a=%%~dpa)else set b=%%~dpa
  12.         )
  13.     )
  14. )
  15. if not defined a (
  16.    echo,没有%s%目录
  17. )else echo %a%&if defined b echo %b%
  18. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
小智BAT + 1 很好,感谢大神。

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 22:04 , Processed in 0.035876 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表