本帖最后由 CrLf 于 2016-1-6 17:31 编辑
提示:注意描述语句中“字节”、“字符”的区别,字符根据代码页的不同,在 ansi 编码里可能为 1~2 字节长度。
【0】- set /a 里直接通过变量名由 set 解释变量时,空变量名或变量值不为合法数字的变量都被理解为 0
- for /l 会将参数中不为有效数字的项和缺失的项理解为 0,典型例子为 for /l %%a in () do echo 无限循环
复制代码 【1】- 0D 0A 这一对回车换行符在预处理时将被理解为 1 个 0A 字符
- for /f 中的 skip 至少等于 1
- pause 可接受任意 1 个字符为输入
复制代码 【4】- 许多命令默认只判断后缀名的前 4 字节(含 . 在内),所以使用 dir、type、findstr 等命令对 *.txt 通配时无法区分 a.txt 和 a.txtt,当通配条件不使用 * 或后缀名超过 4 字节时将自动改用完整匹配
复制代码 【8】- 短名最长 8 字节
- 制表符(tab)宽度为 8 字节
- more 会将 tab 转化为等宽度的空格(默认 8 个字节)
复制代码 【10】- cmd 最多支持同时直接操作 10 个句柄:句柄0 标准输入,句柄1 标准输出(约定俗成),句柄2 标准错误(亦然),句柄3~9 由命令自定义,共 10 个句柄,但句柄备份证明句柄9 之后至少还存在一个无法直接操作的隐藏句柄10
复制代码 【32】- setlocal 最多嵌套 32 层(本质是最多允许用 setlocal 创建 32 张临时变量表),call 可以在调用过程中将层数暂时归零,等子过程退出后恢复
- for /f 的 tokens 设置项最多支持 32 节,但是无论是否声明 * 都必须为其保留一个位置,所以若要用全 32 节,必须声明为 tokens=1-31*(无法直接声明超过 31 的节)
- cmd 计算时以 long int 的数据类型进行操作,其中的数字由 32 位组成
复制代码 【512】复制代码 【1024】- set /p 最多容许 1024 个字节长度,但若第 1023、1024 字节处所取得的两字节不是一个完整的宽字符时,最多容许 1023 字节
复制代码 【4096】- sort 命令的 /rec 开关默认值为 4096,即默认支持对短于 4096 字符的行进行排序(此设置可更改)
复制代码 【8153】- 64 位 Windows7 中,cmd 的单条命令行长度上限为 8153 字符
- 有趣的是,在 xp 的 cmd 中,该上限为 8154 字符
复制代码 【8192】- cmd 从脚本中一次读入 8192 字符
- 变量长度最长为 8192 字符,包括变量名、等号和内存中的变量分隔符 00
- 若因内存泄露导致变量末尾的 00 丢失,使用 %var% 或 !var! 引用变量时只会读取 8192 字符长度
复制代码 【32767】复制代码 【65535】- cmd 所能使用的内存空间上限为 65536K,但是每次 call 都能额外领取空间额度。
- sort 支持的行长度上限为 65535 字符
- more 执行时一次最多操作 65535 行
- debug 支持的段空间为 65535 字节(因为它是 16 位的 com),所以仅支持小于 64K 的文件
复制代码 【-2147483648 与 2147483647】- cmd 中数值的上下限,其实就是 long int 支持的计算范围
复制代码
|