如何解释批处理string中的variables?

我有一个包含variables的string的问题
我读了一个registry中的密钥,如下所示:

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 

我想将registry值转换成一个好的path

set RegValue=%%C替换为call set RegValue=%%C这将导致两次可变扩展; 一次用于呼叫命令,然后再次用于设置命令。 运行这个例子.bat脚本来看看它的行动。

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