假设我在批处理脚本中定义了以下变量:
set VariableFirst=value1
set VariableLast=value2
然后在代码的另一部分设置另一个变量
set Type=First
我想访问其中之一,%VariableFirst%
并%VariableLast%
取决于变量的值%Type%
(类似的东西,echo %Variable%Type%%
但这是行不通的)。如何在Windows批处理脚本中执行此操作?
在您的特定情况下,这应该可以工作:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
set VariableFirst=value1
set VariableLast=value2
set Type=First
echo !Variable%Type%!
这里是解释:
关键是SETLOCAL EnableDelayedExpansion
。通常,您的变量是在解析时求值的。考虑以下代码:
@ECHO OFF
SET a=b
SET b=abc
ECHO %%a%%
您希望%a%
将其评估为K,因此ECHO %%a%%
将变为ECHO %b%
,并且输出将为abc。但这不会以这种方式工作。解析时求值意味着无需处理代码即可设置变量的值。SET a=b
并且SET b=abc
可以正常运行,但是ECHO %% a %%不会,因为要知道%a%是b,必须执行第一行,但是执行是在设置变量之后进行的。因此,%% a %%表示%a%,而输出仅为%a%。
您需要做的是强制解释器在运行时评估最后一行,这意味着逐行执行并在到达时评估最后一行。为此,您需要SETLOCAL EnableDelayedExpansion
在脚本的开头添加。现在 !...!强制解释器考虑该行之前对变量所做的所有更改,以评估由感叹号包围的变量的当前值。
现在来看一下:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET a=b
SET b=abc
ECHO !%a%!
现在a是b,b是abc,!%a%!在运行时评估。因此,在这种情况下ECHO !%a%!
,将在控制台知道%a%为b并可以替换!%a%!的时刻进行评估。与!b!这是abc。因此输出为abc。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句