[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
俺了解得比较原始,只是靠经验从批本身来总结...
虽然感觉上楼主的观点能解释经验,应该也是楼主幸苦反编译所得,但是可否像前几次那样贴出截图(同尺寸下图的体积最好小一点,省空间啊哈)以便他人理解和勘误?

对汇编和c都只了解了一点点,可能很难参与讨论,准备私信呼叫 qzw 他们来议论和补充。

TOP

如果你以Unix格式换行符(\n)保存上面的代码,那么情况会有所不同,因为不存在"\n\r"或者"\r\n"的组合,所以AnsiBuf中的内容会全部转成Unicode保存在UniBuf,CMD只需要读取一次文件(上面是三次)就能处理完整个脚本!


这里好像有点问题噢,按我的理解,楼主的意思是以 LF 为换行编码保存运行 bat 时,cmd 读入 MAX_BUFFER_SIZE 的内容后无论其中有多少个复合语句都只在内存中解析,也就是说如果 %~z0 小于 MAX_BUFFER_SIZE,cmd 应该是不知道同等体积的 %0 内容是否有变的,可运行这个还是能看到 pause 的效果:
  1. @echo off
  2. echo echo abc
  3. (findstr "e ^$" %0 & echo ^
  4. pause)>$
  5. move /y $ %0
  6. 12345
复制代码
含有 50000 个 rem 的批处理分别存为 LF 和 CRLF,测试观察到的用时相差无几,在小范围内上下浮动,用括号分别囊括后用时骤减。
也就是说即使用了 LF,貌似也像哪位前辈解释的那样:cmd 每读入一次只处理一个符合语句

测试环境 win7

TOP

返回列表