[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
【8192】
  1. cmd 从脚本中一次读入 8192 字符
  2. 变量长度最长为 8192 字符,包括变量名、等号和内存中的变量分隔符 00
  3. 若因内存泄露导致变量末尾的 00 丢失,使用 %var% 或 !var! 引用变量时只会读取 8192 字符长度
复制代码
缓冲区的大小为8192字节,一次读入的是8191字节而不是8192字符,最后一个字节用来保存C语言字符串结束符NULL。

所谓内存泄露是指动态分配的内存没有被合理的回收而导致可用内存的减少,不知道这跟变量末尾的 00 丢失有什么关系,以及在什么情况下变量末尾的 00 会丢失?

TOP

本帖最后由 Demon 于 2012-8-17 14:14 编辑

看来又是系统之家的差异,Windows 7是一次读取8191(0x1FFF)个字节



而XP是一次读取8192(0x2000)个字节



你给出的例子只是表面现象,

"echo " & String(8192,"t"),读取8192个字节转成Unicode后是8192个字符,XP下大于等于8192个字符就会报错“输入行太长。”

"echo " & String(8192,"测"),由于第8192个字节(0xB2)是GBK编码的高位字节(LeadChar),这时CMD会再多读一个字节,也就是一共会读取8193个字节(AnsiBuf缓冲区其实不止8192个字节,之前弄错了),

转成Unicode之后是4099个字符(5 + (8193 - 5) / 2 = 4099),小于8192,所以不会报错。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

    • CrLf: 谢谢指点!技术 + 1

TOP

返回列表