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

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

比如:HKCU\123项里面的test键值是:
123
456
789
我要让这个键值输出到1.txt文本中,也是注册表中的键值格式(而不是有换行符的那种):
123
456
789

回复 18# CrLf


    是字符串中每一行中的数值中有空格

TOP

回复 17# alpha


好吧,爱莫能助
那么你说的路径含空格是哪里的路径

TOP

回复 16# CrLf


    感谢你的帮助,但是我这个读取和普通的读取似乎不太一样,因为我这个是“多字符串类型”,delphi里面似乎执行读取“多字符串”的效率不高。

TOP

回复 15# alpha


其实从效率和可靠性上考虑,不建议在编程语言中使用 shell 工具
dephi 本身就可以读取注册表:
http://zhidao.baidu.com/link?url ... cGH64mtUkPY9TORDCZq

TOP

回复 14# DAIC


    我的delphi不支持多行命令。

TOP

回复 8# alpha


    出于什么样的需求必须要合并到一行?

TOP

可以兼容路径中含\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>

TOP

回复 10# CrLf


    又有问题了,如果路径里面有空格就不行了。

TOP

回复 10# CrLf


    OK,谢啦,问题解决喽

TOP

回复 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 里也可以写多行命令啊,如果可以复制粘贴为啥要写成一行...

TOP

回复 6# Linuxer


    提示路径用法无效。

TOP

回复 7# apang


   说得妙,我发现开了延迟后,在cmd里面是无效的,必须要执行 cmd /v on,但是一旦开启这个,就不能合并为一行了,好纠结,还是那句话,怎么合并?

TOP

回复 5# alpha


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

如果没有特殊要求,不建议这样干,可读性差,不便于修改维护

TOP

把两个for套的括号去掉试试呢?
如果不行,那就是cmd识别不了这样的格式,还是分行写吧。

TOP

返回列表