【发布时间】:2010-10-16 17:31:56
【问题描述】:
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
好像变量“first”总是0,为什么?
【问题讨论】:
标签: windows batch-file
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
好像变量“first”总是0,为什么?
【问题讨论】:
标签: windows batch-file
对于批处理文件,变量在其命令被读取时会被展开——这样一来for 就会执行。那时,它不再是 echo %first%,而是字面上的 echo 0,因为那是扩展点的值。
要解决这个问题,您需要使用延迟扩展,将变量名称用! 而非% 括起来——这样就可以是echo !first!。这可能需要您使用 /V 参数启动 cmd.exe,或者在批处理文件的开头使用 setlocal enabledelayedexpansion(紧跟在 echo off 之后)。
如果您输入set /?,您将在输出末尾看到更详细的说明。
【讨论】: