@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
似乎变量“first”始终为0.为什么?
答案 0 :(得分:25)
对于批处理文件,在读取命令时会扩展变量 - 这样就会在for
执行时立即生成。此时,它不再显示echo %first%
,它实际上是echo 0
,因为这是扩展点的值。
要解决此问题,您需要使用!
而不是%
包围变量名称来使用延迟展开,这样就可以echo !first!
。这可能需要您使用/ V参数启动cmd.exe,或者在批处理文件的开头使用setlocal enabledelayedexpansion
(在echo off
之后)。
如果您输入set /?
,您会在输出结尾处看到更详细的解释。