我正在制作一个程序。安装后,它将运行一个需要知道应用程序文件夹在哪里的批处理文件
我使用的安装向导软件创建了一个代表程序路径的注册表项,但"程序文件"中有一个空格,因此批处理输出将是"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
设置选项以控制批处理文件中环境变量的可见性