如何解释批处理字符串中的变量?

时间:2013-02-06 12:15:53

标签: windows shell scripting batch-file dos

我在包含变量的字符串中遇到问题 我在注册表中读了一个关键字:

call:ReadReg "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "Desktop"
echo %RegValue%

:ReadReg
FOR /F "usebackq tokens=1-3" %%A IN (`REG QUERY "%~1" /v "%~2" 2^>nul`) DO (
    set RegName=%%A
    set RegType=%%B
    set RegValue=%%C
)
goto:eof

但RegValue中返回的值为:%USERPROFILE%\Desktop 而不是:C:\Documents and Settings\username\Desktop

ECHO行显示:

C:\Documents and Settings\alopez>echo %USERPROFILE%\Bureau
%USERPROFILE%\Bureau

我想将注册表值转换为好路径

1 个答案:

答案 0 :(得分:4)

set RegValue=%%C替换为call set RegValue=%%C这将导致变量扩展两次;一次用于call命令,然后再一次用于set命令。运行此示例.bat脚本以查看其运行情况。

@echo off

set x=%%Path%%
echo %x%
echo.
call echo %x%
call set x=%x%
echo.
echo %x%
pause >nul