我在for循环中使用数组,并在每个时间循环处理数组值时尝试将值分配给变量。但是当我将值分配给变量时,结果却与预期不符。
这就是我想要做的:
@echo off
setlocal enabledelayedexpansion
SET var[0]=a
SET var[1]=b
SET var[2]=c
SET var[3]=d
for %%a in (0,1,2,3) do (
SET name=%var[%%a]%
ECHO %name%
)
,但结果显示数组的最后一个值为'd'。我不想使用ECHO !name!
。并期望使用%
a
b
c
d
答案 0 :(得分:1)
通常会显示ECHO is off.
,因为之前没有声明过%name%
。假设您将null
的默认值设置为%name%
,那么输出将是null
,而不是a
,b
,c
和d
。这是因为%name%
是在循环外部声明的。
这是怎么回事?代码块内的echo %name%
将在运行变量之前先获取变量%name%
,因此,解析后的代码块内的代码为:
(
set name=
rem "%var[%" = "" and "%a]%" also = ""
echo
rem %name% wasn't here, because it's parsed before you run it.
)
!
符号是替代变量pre / suffix,仅在您使用时有效
setlocal EnableDelayedExpansion
使用!
的变量仅在语句实际运行而不是解析时才被解析:
(
set name=!var[%%a]!
echo !name!
)
这一次,代码块将忽略!
符号,而只寻找%
符号,并且由于for
循环,%%a
将被数字代替:
(
set name=!var[0]!
echo !name!
)
(
set name=!var[1]!
echo !name!
)
(
set name=!var[2]!
echo !name!
)
(
set name=!var[3]!
echo !name!
)
下次,如果要更改变量并使用它,则可能必须使用!
而不是%
,否则会得到重复的结果。而且,如果您想echo
!
符号,可以将其转义:
echo escaped "^!" symbol^!