使用空格读取注册表值的数据



我正在制作一个程序。安装后,它将运行一个需要知道应用程序文件夹在哪里的批处理文件

我使用的安装向导软件创建了一个代表程序路径的注册表项,但"程序文件"中有一个空格,因此批处理输出将是"C:\program"

我当前的脚本是:

@echo off
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKEY_LOCAL_MACHINESoftwareMarksRTZAV"
set VALUE_NAME=DataPath
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
    set ValueName=%%A
    set ValueType=%%B
    set ValueValue=%%C
)
if defined ValueName (
    echo data "%ValueValue%"
    echo name "%ValueName%"
    echo type "%ValueType%"
) else (
    echo Not found
)

DataPath值在安装时设置为[APPDIR]data[APPDIR]是用户选择的位置。

但正如我所说,如果[APPDIR]在安装程序中被设置为类似C:Program Files (x86)MarksRTZAV的值,该脚本将始终输出C:Program(这实际上是默认值)

我该怎么解决这个问题?

我还要指出;批处理文件不是真正的程序,它将是在正确的工作目录中启动程序的简单脚本。

剪切的下一个代码应该与tokens=1-2*甚至与setlocal DISABLEEXTENSIONS:一起使用

rem ensure %ValueName% is not visible as it could be defined already! 
set "ValueName="
FOR /F "usebackq skip=2 tokens=1-2*" %%A IN (
    `REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
    set "ValueName=%%A"
    set "ValueType=%%B"
    set "ValueValue=%%C"
)
if defined ValueName (
    echo data "%ValueValue%"
    echo name "%ValueName%"
    echo type "%ValueType%"
) else (
    echo Not found
)

资源:

  • FOR /F循环命令:针对另一个命令的结果
  • SETLOCAL设置选项以控制批处理文件中环境变量的可见性

相关内容

最新更新