set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
这个例子永远无法显示 echo 讯息,因为在两个 IF 叙述中的 %VAR% 会在第一个 IF 叙述被读入时便被展开。这是因为它是逻辑上包含了 IF 的内部,而内部又是一个复合叙述。 所以在复合叙述内的 IF 实际上是用"before" 和 "after" 来比较,而这永远不会为真。同样的,下面的例子也不会作用:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
这个例子中并不会建立目前目录中所有档案的列表,相反的只会将 LIST 变量设为最后一个找到的档案。同样地,这是因为 %LIST% 只有在 FOR 叙述第一次被读入时才展开,此时 LIST 变数是空的。所以我们实际执行的 FOR循环是: