以下是在我电脑的cmd中运行的结果- D:\文档资料\局域网\批处理>call cmd
- Microsoft Windows XP [版本 5.1.2600]
- (C) 版权所有 1985-2001 Microsoft Corp.
-
- D:\文档资料\局域网\批处理>set aa=123 & echo %aa%
- %aa%
-
- D:\文档资料\局域网\批处理>
复制代码 &&其实,这个错误不是兄弟犯的,是cmd“犯”的,而这就要说到cmd中的预处理机制了,通常(未开启变量延迟的情况下)cmd在处理输入的命令时,总是预先读取整体行命令然后再进行分析处理,于是在cmd中输入set aa=123 & echo %aa%,cmd就会直接先整行读取命令"set aa=123 & echo %aa%",然后再判断此前(在这一行前面)aa中是否已被赋值和定义(而实际上没有),这样cmd就会认为%aa%就是个输入的字符串而不是被定义的变量,自然就会输出为%aa%了,如要正确输出就必须换行或使用call延迟或开启变量延迟(在上面帖子中我已经给出了方法)。
同时,在for循环语句和if判断语句的括号中如出现连续赋值的情况一样要开启变量延迟,或使用call延迟。 |