35# qzwqzw
我也这么认为,前面被那个比较有条理的说法吓倒了...仔细想想for和if确实是语块,比如:- @echo off&setlocal enabledelayedexpansion
- set "a b=."
- set "tmp=a b"
- echo for内:
- for %%a in ("a b") do if defined %%~a echo 存在“a b”
- ::正确
- echo;&echo 不使用变量延迟:
- (if defined a b echo 存在“a b”)
- ::出错
- echo;&echo 变量延迟:
- (if defined !tmp! echo 存在“a b”)
- ::正确
- echo;&pause
复制代码 我原来一直以为if defined是不支持空格变量名的,直到某天在某群里某个自以为是的家伙误打误撞写出来,我原以为会出错,结果一运行竟然没问题,这才发现原来if的条件语句是和整个语块一起进行划分的,也就是说,if不是一个语句,而是语块,for也是同样的情况,最有说服力的就是for循环中的for命令的开关、选项和参数是无法直接用变量修改的,这也证明了在语块划分完毕的时候,for语句的条件语句之前的部分也已经划分完了:复制代码 众所周知这是会出错的
还有:
call if ...
call for ...
这两个都会出错,从错误提示来看,只能说明,for和if完全不是普通语句,而更可能是语块 |