2012-08-08 79 views
0

我有一个名为‘VAR.bat’,设置变量文件:批次:添加%的一个值来声明另一个变量

SET VARa=C:\Program Files 
SET VARb=C:\Program Files (x86) 
set VARc=C:\ProgramData 

我有一个文件另一个名为“SET.set“只包含变量名:

VARa 
VARb 
VARc 

我想从日常对设定调用是这样的:

for /f "tokens=* delims= " %%a in ('type "SET.set"') do (
    SET CONSA=%%~a 
    SET CONSN=%%^%%a%% 
    CALL :CREATEVAR 
    ) 
    :CREATEVAR 
    if exist "%CONSN%" CALL :%CONSA%_detect 
    exit /b 

:VARa_detect 
echo "%CONSN%" 
exit /b 

:VARb_detect 
echo "%CONSN%" 
exit /b 

:VARc_detect 
echo "%CONSN%" 
exit /b 

使用^逃跑,并添加的值是不工作,因为命令处理器值进行解释,为“%瓦拉%”,而不是“C:\ Program Files文件

回答

3

您可以在这里使用延迟扩展。

setlocal EnableDelayedExpansion 
for /f "tokens=* delims= " %%a in ('type "SET.set"') do (
    SET CONSA=%%~a 
    SET CONSN=!%%~a! 
    CALL :CREATEVAR 
) 

,或者在同一行,你可以通过CALL

... 
call set CONSN=%%%%~a%% 
+0

,工程使用一个额外的expaqnsion !!!!杰布,你有什么不能做的吗? – user1136386 2012-08-10 02:49:52