Batch file 为什么%变量不能正常工作!我的批处理文件中的变量?
我在for循环中使用数组,并试图在每次循环处理数组值时将值分配给变量。但是当我给变量赋值时,结果并不像预期的那样 以下是我试图做的:Batch file 为什么%变量不能正常工作!我的批处理文件中的变量?,batch-file,for-loop,Batch File,For Loop,我在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 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!名字代码>。并期望输出如下所示,带有%
a
b
c
d
通常情况下,它会显示“ECHO已关闭”。
因为以前未声明%name%
。假设您将%name%
的默认值设置为null
,那么输出将是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/后缀,仅在使用
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 escaped "^!" symbol^!
不确定您不想使用delayedexpansion
的原因,但如果您真的拒绝使用它,请禁用delayedexpansion,然后使用call echo%%name%%
,这很难看,也有它自己的缺点。很好的解释,但最后一行echo-escaped“^!”符号中有一个小缺陷代码>,它只显示第一个感叹号,您需要使用双插入符号回显转义“^!”符号^代码>