You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用批处理脚本获取含空格的完整注册表值名称?

解决批处理读取注册表带空格值名称的问题

你的脚本问题出在for /f的tokens=1,3参数——当值名称包含空格时,它会按空格将名称拆分成多个token,导致无法获取完整的名称。要解决这个问题,需要先读取reg query输出的整行内容,再通过注册表类型字段(如REG_SZ、REG_DWORD等,均以REG_开头)作为分隔点,拆分出完整的名称和对应的数据。

以下是修正后的脚本:

@echo off
set "key=path to reg key"
rem 跳过reg query输出的前两行(标题行和空行),读取后续每一行
for /f "skip=2 tokens=*" %%l in ('reg query "%key%" /v "*.exe"') do (
    rem 跳过空行
    if not "%%l"=="" (
        set "line=%%l"
        rem 启用延迟扩展,处理循环内的变量修改与读取
        setlocal enabledelayedexpansion
        rem 提取类型字段(输出行的第二个连续空格分隔块)
        for /f "tokens=2" %%t in ("!line!") do (
            set "type=%%t"
            rem 截取类型字段之前的内容作为值名称,修剪末尾空格
            set "name=!line:*!type!=!"
            set "name=!name:~0,-1!"
            rem 截取类型字段之后的内容作为值数据,修剪开头空格
            set "data=!line:*!type! =!"
        )
        echo Value Name: !name!
        echo Value Data: !data!
        endlocal
    )
)
pause

脚本说明:

  1. skip=2:跳过reg query输出的前两行(第一行是表头,第二行是空行),只处理实际的键值数据行。
  2. tokens=*:读取整行内容,避免被空格拆分,确保能获取包含空格的完整值名称。
  3. 延迟扩展:启用enabledelayedexpansion后,才能在for循环内部正确读取和修改变量(用!变量名!替代%变量名%)。
  4. 按类型字段分割:利用注册表类型字段(如REG_SZ)作为固定分隔点,分别提取值名称和值数据,再修剪多余空格。

如果你的注册表值类型不固定(比如同时存在REG_SZ、REG_DWORD等),这个脚本依然能正常工作,因为它会自动提取当前行的类型字段作为分割依据。

内容的提问来源于stack exchange,提问作者Abhishek Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:45