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

[注册表类] 批处理如何输出注册表中多字符串的键值?

[复制链接]
发表于 2014-8-19 14:09:13 | 显示全部楼层 |阅读模式
比如:HKCU\123项里面的test键值是:
123
456
789
我要让这个键值输出到1.txt文本中,也是注册表中的键值格式(而不是有换行符的那种):
123
456
789
发表于 2014-8-19 14:53:12 | 显示全部楼层
reg export HKCU\123 test.reg
把 test.reg 压缩之后传上来看看
 楼主| 发表于 2014-8-19 16:59:33 | 显示全部楼层
回复 2# DAIC
发表于 2014-8-19 19:43:54 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1,2*" %%a in ('reg query "HKCU\123"') do (
  3.     if /i "%%a" == "test" set "var=%%c"
  4. )
  5. for %%a in ("%var:\0=" "%") do echo,%%~a
  6. pause
复制代码
 楼主| 发表于 2014-8-19 21:45:22 | 显示全部楼层
本帖最后由 alpha 于 2014-8-19 21:47 编辑

回复 4# apang


    为什么我合并为一行之后,会一闪而过?
  1. (for /f "tokens=1,2*" %%a in ('reg query "HKCU\123"') do (if /i "%%a" == "test" set "var=%%c"))&(for %%a in ("%var:\0=" "%") do echo,%%~a)&pause
复制代码
发表于 2014-8-19 22:23:42 | 显示全部楼层
把两个for套的括号去掉试试呢?
如果不行,那就是cmd识别不了这样的格式,还是分行写吧。
发表于 2014-8-19 22:35:15 | 显示全部楼层
回复 5# alpha


    你把它们整成一行,那就成复合语句了,那就必须开启变量延迟扩展

如果没有特殊要求,不建议这样干,可读性差,不便于修改维护
 楼主| 发表于 2014-8-19 22:55:39 | 显示全部楼层
回复 7# apang


   说得妙,我发现开了延迟后,在cmd里面是无效的,必须要执行 cmd /v on,但是一旦开启这个,就不能合并为一行了,好纠结,还是那句话,怎么合并?
 楼主| 发表于 2014-8-19 22:57:22 | 显示全部楼层
回复 6# Linuxer


    提示路径用法无效。
发表于 2014-8-19 23:04:57 | 显示全部楼层
回复 8# alpha


一定要写一行的话就是这样:
  1. cmd /v /c "(for /f "tokens=1,2*" %%a in ('reg query "HKCU\123"') do (if /i "%%a" == "test" set "var=%%c"))&(for %%a in ("!var:\0=" "!") do echo,%%~a)&pause"
复制代码
但 cmd 里也可以写多行命令啊,如果可以复制粘贴为啥要写成一行...
 楼主| 发表于 2014-8-19 23:28:47 | 显示全部楼层
回复 10# CrLf


    OK,谢啦,问题解决喽
 楼主| 发表于 2014-8-20 16:54:17 | 显示全部楼层
回复 10# CrLf


    又有问题了,如果路径里面有空格就不行了。
发表于 2014-8-20 20:45:58 | 显示全部楼层
可以兼容路径中含\0和空格的情况,不要想合并到一行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set Lf=^


  4. for /f %%i in ('copy /z "%~0" nul') do for %%j in ("!Lf!") do (
  5.     endlocal
  6.     for /f "tokens=1,2*" %%a in ('reg query "HKCU\123" /se ^^^|')do (
  7.         if /i "%%a" == "test" (
  8.             set "var=%%c"
  9.             setlocal enabledelayedexpansion
  10.             echo,!var:^|=%%i%%~j!
  11.         )
  12.     )
  13. )
复制代码
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Windows\System32>reg query "HKCU\123" /se ^|

HKEY_CURRENT_USER\123
    test    REG_MULTI_SZ    (Start "" "C:\a b c\01.exe")|(Start C:\2.exe)|(Start
C:\3.exe)


C:\Windows\System32>C:\Users\apang\Desktop\test.bat
(Start "" "C:\a b c\01.exe")
(Start C:\2.exe)
(Start C:\3.exe)
C:\Windows\System32>
发表于 2014-8-20 20:55:53 | 显示全部楼层
回复 8# alpha


    出于什么样的需求必须要合并到一行?
 楼主| 发表于 2014-8-20 21:30:19 | 显示全部楼层
回复 14# DAIC


    我的delphi不支持多行命令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 19:39 , Processed in 0.044666 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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