批处理 - 使用名称中的参数评估动态变量

时间:2015-04-09 01:28:58

标签: batch-file cmd dynamic-variables

我正在编写一个不能是本地的批处理库,因此外部批处理文件可以从单个定义的位置调用这些函数。

这要求调用批处理文件必须为其中命名的变量传入“唯一”标识符。 (I.E.传递%1的申请1)。

然后我希望动态命名变量,例如:

set %1_Timer=Hello

这很有效,除了我需要能够评估所说的动态变量,但是找不到允许我评估这些基于参数的动态变量的解决方案。

我尝试过以下解决方案:

echo %1_Timer%
echo %1_Timer
echo %%1_Timer%%
echo %%1_Timer%
Call echo %%1%_Timer%

我无法使用未动态命名的变量,因为使用此库的其他脚本可能会更改该非动态变量,从而改变其他脚本的输出。

2 个答案:

答案 0 :(得分:2)

您想使用延迟扩展。

@echo off
setlocal enabledelayedexpansion

echo !%1_Timer!

您还可以使用call%%符号(call echo %%%1_Timer%%,但通常延迟扩展会更有用。此外,如果您设置或修改内部变量,则必须使用代码块,如forif

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET myapp_timer=original_value
CALL :appsee myapp
CALL :appset myapp
CALL :appsee myapp
GOTO :EOF

:: set variable(s) - can be external batch to set caller's environment
:appset
SET %1_timer=hello
GOTO :EOF

:: see variable(s) - can be external batch to set caller's environment
:appsee
CALL ECHO %%1_timer=%%%1_timer%%
GOTO :EOF

这是怎样的。