获取批处理脚本中嵌套变量名的值

时间:2014-04-25 08:21:41

标签: batch-file

我有一个子程序,它使用参数来返回一个字符串。作为我的日志记录的一部分,我想在退出例程之前显示返回的参数值。

更容易在代码中解释!

@ECHO OFF
SET MYVAL=1
ECHO Before MYVAL=%MYVAL%
CALL :SETMYVAL MYVAL
ECHO After  MYVAL=%MYVAL%
PAUSE
EXIT /b 0

:SETMYVAL
SET "%~1=2"
ECHO SETMYVAL called, returning %~1=%~1
GOTO :EOF

上面的代码产生:

Before MYVAL=1
SETMYVAL called, returning MYVAL=MYVAL
MYVAL=2
Press any key to continue . . .

但我希望子程序的最后一行输出

SETMYVAL called, returning MYVAL=2

任何想法(不移动线路,或使用扩展或延迟扩展)

3 个答案:

答案 0 :(得分:1)

ECHO SETMYVAL called, returning %~1=2

这应该做到....

或者

ECHO SETMYVAL called, returning %~1=%MYVAL%

call ECHO SETMYVAL called, returning %~1=%%%~1%%

答案 1 :(得分:1)

你的案子是人为的,所以你可能无法获得现实生活中的解决方案。

@ECHO OFF
SET MYVAL=1
ECHO Before MYVAL=%MYVAL%
CALL :SETMYVAL MYVAL
ECHO After  MYVAL=%MYVAL%
PAUSE
EXIT /b 0

:SETMYVAL
SET "val=2" & call SET "%~1=%%val%%"
ECHO SETMYVAL called, returning %~1=%val%
GOTO :EOF

答案 2 :(得分:0)

感谢foxidrive,我能想到的最好的是:

:SETMYVAL
SET "%~1=2"
ECHO ECHO %%%~1%%>"%TEMP%\SETMYVAL.bat"
FOR /F "tokens=*" %%A IN ('CALL "%TEMP%\SETMYVAL.bat"') DO (CALL :SETMYVALFROMFILE %%A)
ECHO SETMYVAL called, returning %~1=%MYTEMP%
GOTO :EOF
:SETMYVALFROMFILE
SET MYTEMP=%~1
GOTO :EOF

令人讨厌的呃?