如果你以Unix格式换行符(\n)保存上面的代码,那么情况会有所不同,因为不存在"\n\r"或者"\r\n"的组合,所以AnsiBuf中的内容会全部转成Unicode保存在UniBuf,CMD只需要读取一次文件(上面是三次)就能处理完整个脚本!
这里好像有点问题噢,按我的理解,楼主的意思是以 LF 为换行编码保存运行 bat 时,cmd 读入 MAX_BUFFER_SIZE 的内容后无论其中有多少个复合语句都只在内存中解析,也就是说如果 %~z0 小于 MAX_BUFFER_SIZE,cmd 应该是不知道同等体积的 %0 内容是否有变的,可运行这个还是能看到 pause 的效果:- @echo off
- echo echo abc
- (findstr "e ^$" %0 & echo ^
-
- pause)>$
- move /y $ %0
-
- 12345
复制代码 含有 50000 个 rem 的批处理分别存为 LF 和 CRLF,测试观察到的用时相差无几,在小范围内上下浮动,用括号分别囊括后用时骤减。
也就是说即使用了 LF,貌似也像哪位前辈解释的那样:cmd 每读入一次只处理一个符合语句
测试环境 win7 |