标题: [注册表类] 批处理如何输出注册表中多字符串的键值? [打印本页]
作者: alpha 时间: 2014-8-19 14:09 标题: 批处理如何输出注册表中多字符串的键值?
比如:HKCU\123项里面的test键值是:
123
456
789
我要让这个键值输出到1.txt文本中,也是注册表中的键值格式(而不是有换行符的那种):
123
456
789
作者: DAIC 时间: 2014-8-19 14:53
reg export HKCU\123 test.reg
把 test.reg 压缩之后传上来看看
作者: alpha 时间: 2014-8-19 16:59
回复 2# DAIC
作者: apang 时间: 2014-8-19 19:43
- @echo off
- 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
复制代码
作者: alpha 时间: 2014-8-19 21:45
本帖最后由 alpha 于 2014-8-19 21:47 编辑
回复 4# apang
为什么我合并为一行之后,会一闪而过?- (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
复制代码
作者: Linuxer 时间: 2014-8-19 22:23
把两个for套的括号去掉试试呢?
如果不行,那就是cmd识别不了这样的格式,还是分行写吧。
作者: apang 时间: 2014-8-19 22:35
回复 5# alpha
你把它们整成一行,那就成复合语句了,那就必须开启变量延迟扩展
如果没有特殊要求,不建议这样干,可读性差,不便于修改维护
作者: alpha 时间: 2014-8-19 22:55
回复 7# apang
说得妙,我发现开了延迟后,在cmd里面是无效的,必须要执行 cmd /v on,但是一旦开启这个,就不能合并为一行了,好纠结,还是那句话,怎么合并?
作者: alpha 时间: 2014-8-19 22:57
回复 6# Linuxer
提示路径用法无效。
作者: CrLf 时间: 2014-8-19 23:04
回复 8# alpha
一定要写一行的话就是这样:- 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 里也可以写多行命令啊,如果可以复制粘贴为啥要写成一行...
作者: alpha 时间: 2014-8-19 23:28
回复 10# CrLf
OK,谢啦,问题解决喽
作者: alpha 时间: 2014-8-20 16:54
回复 10# CrLf
又有问题了,如果路径里面有空格就不行了。
作者: apang 时间: 2014-8-20 20:45
可以兼容路径中含\0和空格的情况,不要想合并到一行- @echo off
- setlocal enabledelayedexpansion
- set Lf=^
-
-
- for /f %%i in ('copy /z "%~0" nul') do for %%j in ("!Lf!") do (
- endlocal
- for /f "tokens=1,2*" %%a in ('reg query "HKCU\123" /se ^^^|')do (
- if /i "%%a" == "test" (
- set "var=%%c"
- setlocal enabledelayedexpansion
- echo,!var:^|=%%i%%~j!
- )
- )
- )
复制代码
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>
作者: DAIC 时间: 2014-8-20 20:55
回复 8# alpha
出于什么样的需求必须要合并到一行?
作者: alpha 时间: 2014-8-20 21:30
回复 14# DAIC
我的delphi不支持多行命令。
作者: CrLf 时间: 2014-8-20 22:02
回复 15# alpha
其实从效率和可靠性上考虑,不建议在编程语言中使用 shell 工具
dephi 本身就可以读取注册表:
http://zhidao.baidu.com/link?url ... cGH64mtUkPY9TORDCZq
作者: alpha 时间: 2014-8-21 02:23
回复 16# CrLf
感谢你的帮助,但是我这个读取和普通的读取似乎不太一样,因为我这个是“多字符串类型”,delphi里面似乎执行读取“多字符串”的效率不高。
作者: CrLf 时间: 2014-8-21 03:41
回复 17# alpha
好吧,爱莫能助
那么你说的路径含空格是哪里的路径
作者: alpha 时间: 2014-8-21 14:11
回复 18# CrLf
是字符串中每一行中的数值中有空格
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |