为什么这个批处理变量即使在设置时也不会改变?

时间:2010-10-16 17:31:57

标签: windows batch-file

@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)

似乎变量“first”始终为0.为什么?

1 个答案:

答案 0 :(得分:25)

对于批处理文件,在读取命令时会扩展变量 - 这样就会在for执行时立即生成。此时,它不再显示echo %first%,它实际上是echo 0,因为这是扩展点的值。

要解决此问题,您需要使用!而不是%包围变量名称来使用延迟展开,这样就可以echo !first!。这可能需要您使用/ V参数启动cmd.exe,或者在批处理文件的开头使用setlocal enabledelayedexpansion(在echo off之后)。

如果您输入set /?,您会在输出结尾处看到更详细的解释。