echo %1*%2=%aa%>>jieguo.txt
因为这一句中,%aa% 的结果有可能是1、2、3、……、9这些不小于10的整数。
在 CMD 中,如果这些整数出现在重定向符号(>、>>)的前面,那么它的作用就变成了指定重定向的文件句柄了。
其中 1 代表标准输出,这也是为什么1*1=1的结果显示为“1*1=”的原因了,因为最后一个1出现在>>符号的前面,它的含义已经发生了变化。
而 2 代表标准错误输出,这个时候1*2的时候结果显示为“1*2=2”,而这个2正好位于重定向符号的前面,所以代表的是标准错误输出句柄,也就是说 CMD 只把这个命令输出的错误结果才输出到 jieguo.txt 文件中,而正确的“1*2=2“反而没有输出到 jieguo.txt 文件中,这也是为什么1*2=2没有在 jieguo.txt 文件中存在的原因。
其实 3 到 9 没有出现在文件中,也是因为 3 到 9 是 CMD 保留的特殊的文件句柄的原因。
你可以搜索以前相关的讨论贴来了解文件句柄的含义和用法。