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

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

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

reg export HKCU\123 test.reg
把 test.reg 压缩之后传上来看看

TOP

回复 2# DAIC

TOP

  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
复制代码

TOP

本帖最后由 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
复制代码

TOP

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

TOP

回复 5# alpha


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

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

TOP

回复 7# apang


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

TOP

回复 6# Linuxer


    提示路径用法无效。

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

回复 10# CrLf


    OK,谢啦,问题解决喽

TOP

回复 10# CrLf


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

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

回复 8# alpha


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

TOP

回复 14# DAIC


    我的delphi不支持多行命令。

TOP

返回列表