路径扩展批处理脚本问题

时间:2014-06-13 18:34:53

标签: batch-file

我在使用批处理文件进行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

2 个答案:

答案 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