我在使用批处理文件进行Windows路径扩展时出现问题,其中变量包含Windows注册表中的字符串。见下面的脚本。我尝试了多种方法,但我必须遗漏一些简单的方法。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2*" %%a in ('reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" /t REG_EXPAND_SZ /f ServiceDll /s ^| grep.exe -ia "REG_EXPAND_SZ" ') do (
set registry_value2=%%b
call :regmerge
)
goto :endofscript
:regmerge
echo !registry_value2!
goto :eof
:endofscript
endlocal
答案 0 :(得分:1)
替换
set registry_value2=%%b
带
call set "registry_value2=%%b"
并删除对regmerge的调用。 call
将强制解析器执行第二次传递并替换环境变量引用。
答案 1 :(得分:0)
这是一个使用findstr并将中间结果存储在临时文件中的可能解决方案。
@echo off
rem tempfile
set tf=regfind.tmp
rem reg query output pipe into findstr and redirect to temnpfile
reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" /t REG_EXPAND_SZ /v ServiceDll /s | findstr /C:SystemRoot > %tf%
rem iterate over each line in temp file and call merge
for /F "tokens=3*" %%a in (%tf%) do call :merge %%a
rem delete tempfile
del /q %tf%
goto :eof
:merge
rem SystemRoot is exapanded now...
echo %1
goto :eof