简单的批处理 将变量输出到文本 失败了

@echo off
if exist lalala.txt (
del lalala.txt
) else (
set a=aaa
set b=bbb
echo %a% > lalala.txt
echo %b% >> lalala.txt
start lalala.txt
)
echo=
pause & exit

lalala.txt 的内容:

ECHO 处于关闭状态。
ECHO 处于关闭状态。

如果只单独用else里面这一部分

@echo off
set a=aaa
set b=bbb
echo %a% > lalala.txt
echo %b% >> lalala.txt
start lalala.txt
echo=
pause & exit

就正常将a和b输出

这是为什么 要怎么解决?
这是因为整个if 语句是一复合语句,批处理会进行一次预处理%a%类的把它处理成if 之前的变量 a 的值,显然之前并没赋值即%a%为尘裂空派脊闭,对于echo 命令为空就是显示当前回显状态
加call并双写%是解决变量延迟扩展的一种方法
两句改为
call echo %%a%%> lalala.txt
call echo %%b%%>> lalala.txt就能得到正常结果
一般的方法是在之前加上setlocal enabledelayedexpansion语句
并在使用野闷%a%之类时用!a!代替即可

没问键迅题啊。

运行梁洞BAT文件后:

再运行一次BAT文件,lalala.txt就被删除稿渣此了。