批处理 - 使用名称中的参数评估动态变量
Batch - Evaluating dynamic variables with parameter in name
我正在编写一个不能在本地的批处理库,以便外部批处理文件可以从单个定义的位置调用函数。
这要求调用批处理文件必须为其中命名的变量传入一个 "unique" 标识符。 (即为 %1 传入 Application1)。
然后我希望动态命名变量,例如:
set %1_Timer=Hello
这很好用,除了我需要能够评估所述动态变量,但找不到允许我评估这些基于参数的动态变量的解决方案。
我尝试过以下解决方案:
echo %1_Timer%
echo %1_Timer
echo %%1_Timer%%
echo %%1_Timer%
Call echo %%1%_Timer%
我不能使用未动态命名的变量,因为使用此库的其他脚本可能会更改该非动态变量,从而更改其他脚本的输出。
您想使用延迟扩展。
@echo off
setlocal enabledelayedexpansion
echo !%1_Timer!
你也可以使用call
和%%
符号(call echo %%%1_Timer%%
,但一般延迟扩展会更有用。另外,如果你曾经设置或修改过变量,它是强制性的在代码块内部,如 for
或 if
.
@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
方法如下。
我正在编写一个不能在本地的批处理库,以便外部批处理文件可以从单个定义的位置调用函数。
这要求调用批处理文件必须为其中命名的变量传入一个 "unique" 标识符。 (即为 %1 传入 Application1)。
然后我希望动态命名变量,例如:
set %1_Timer=Hello
这很好用,除了我需要能够评估所述动态变量,但找不到允许我评估这些基于参数的动态变量的解决方案。
我尝试过以下解决方案:
echo %1_Timer%
echo %1_Timer
echo %%1_Timer%%
echo %%1_Timer%
Call echo %%1%_Timer%
我不能使用未动态命名的变量,因为使用此库的其他脚本可能会更改该非动态变量,从而更改其他脚本的输出。
您想使用延迟扩展。
@echo off
setlocal enabledelayedexpansion
echo !%1_Timer!
你也可以使用call
和%%
符号(call echo %%%1_Timer%%
,但一般延迟扩展会更有用。另外,如果你曾经设置或修改过变量,它是强制性的在代码块内部,如 for
或 if
.
@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
方法如下。