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

jca*_*219 14 windows batch-file

@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*sen 28

对于批处理文件,在读取命令时会扩展变量 - 这样就可以在for执行时立即执行.在这一点上,它不再说echo %first%,它字面上说echo 0,因为这是扩张点的价值.

为了解决这个问题,你需要使用延迟扩展来!代替%- 而不是- 这样就可以使用延迟扩展echo !first!.这可能需要您使用/ V参数启动cmd.exe,或者setlocal enabledelayedexpansion在批处理文件的开头使用(仅在之后echo off).

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