- 帖子
- 548
- 积分
- 1246
- 技术
- 176
- 捐助
- 0
- 注册时间
- 2015-6-4
|
[系统相关] 探讨:ECHO;TAB若干退格字符将光标多行回退与窗口列宽的关系
本帖最后由 aa77dd@163.com 于 2016-9-22 16:21 编辑
本论坛有一帖:
批处理将光标退回原点
http://www.bathome.net/redirect. ... ptid=7137&pid=71368
阐述了光标多行回退的一种方式, 并给出了一个回退行数和 退格字符 个数的公式
我在 简体中文 64位 win 7 系统测试, 发现:
1. 在某些列宽 [MODE 命令的 COLS 参数(系统默认值是 80)], 比如 一些对 8 余 1 的数 41, 49, 57, 65, 73, 81,.. 我用某种测试代码没有找到让光标多行回退的方法
2. batman 给出的公式并不适用于一些情况, 只是一些特定情形下可行.
采用复制代码 方式 -- TAB 可以采用连续 2 个或者更多, 但此处暂时只研究 仅 1 个 TAB
当 COLS 对 8 的余数是 1 时, 此处采用的方式不能将光标回退到上面的行
"每多回退一行需退格数" 是一个和 缓冲 区宽度[即 mode 命令的 COLS 参数] 以及光标回退之前的水平坐标[一行的最左边为 0] 都相关的函数
这个函数是 [光标回退之前的水平坐标 对 8 余数] 的增函数; 光标回退之前的水平坐标 以一个半角字符为 1 单位, 全角汉字字符占 2 个单位
当回退之前光标的水平坐标是 0 时, 即在一行的最左边, 或者 水平坐标 对 8 余 0 时
"每多回退一行需退格数" 与 COLS 之间有如下公式:- "每多回退一行需退格数" = ceil ( COLS / 8 )
复制代码 当回退之前光标的水平坐标对 8 不是余 0 时, "每多回退一行需退格数" 需要更大的数字, 计算方式暂不明确
根据上公式可计算得[当回退之前光标的水平坐标是 0 时, 即在一行的最左边, 或者 水平坐标 对 8 余 0 时]:
COLS 在 [82, 88] 范围时, "每多回退一行需退格数" 为 11
COLS 在 [74, 80] 范围时, "每多回退一行需退格数" 为 10
COLS 在 [66, 72] 范围时, "每多回退一行需退格数" 为 9
COLS 在 [58, 64] 范围时, "每多回退一行需退格数" 为 8
...
COLS 在 [18, 24] 范围时, "每多回退一行需退格数" 为 3
...
宽 COLS = 80 时
"回退行0" 指回退到 光标回退之前 的所在行水平坐标 0 位置
"回退行1" 指回退到 "回退行0" 的上 1 行水平坐标 0 位置
"回退行2" 指回退到 "回退行0" 的上 2 行水平坐标 0 位置
"回退行3" 指回退到 "回退行0" 的上 3 行水平坐标 0 位置
...
回退前光标水平坐标[最左位置为0,半角字符占1单位,汉字占两单位] | "每多回退一行需退格数" | "回退行0" | "回退行1" | "回退行2" | "回退行3"
| 0 | 10 | 2 | 12 | 22 | 32 | 1 | 11 | 2 | 13 | 24 | 35 | 2 | 13 | 2 | 15 | 28 | 41 | 3 | 15 | 2 | 17 | 32 | 47 | 4 | 19 | 3 | 22 | 41 | 60 | 5 | 25 | 3 | 28 | 53 | 78 | 6 | 37 | 5 | 42 | 79 | 116 | 7 | 74 | 9 | 83 | 157 | 231 | 8 | 10 | 3 | 13 | 23 | 33 | 9 | 11 | 3 | 14 | 25 | 36 | 10 | 13 | 3 | 16 | 29 | 42 | 11 | 15 | 4 | 19 | 34 | 49 | 12 | 19 | 5 | 24 | 43 | 62 | 13 | 25 | 6 | 31 | 56 | 81 | 14 | 37 | 9 | 46 | 83 | 120 | 15 | 74 | 17 | 91 | 165 | 239 | 16 | 10 | 4 | 14 | 24 | 34 | 17 | 11 | 4 | 15 | 26 | 37 | 18 | 13 | 5 | 18 | 31 | 44 | 19 | 15 | 5 | 20 | 35 | 50 | 20 | 19 | 7 | 26 | 45 | 64 | 21 | 25 | 9 | 34 | 59 | 84 | 22 | 37 | 13 | 50 | 87 | 124 | 23 | 74 | 25 | 99 | 173 | 247 | 24 | 10 | 5 | 15 | 25 | 35 | 25 | 11 | 5 | 16 | 27 | 38 | 26 | 13 | 6 | 19 | 32 | 45 | 27 | 15 | 7 | 22 | 37 | 52 | 28 | 19 | 9 | 28 | 47 | 66 | 29 | 25 | 11 | 36 | 61 | 86 | 30 | 37 | 17 | 54 | 91 | 128 | 31 | 74 | 33 | 107 | 181 | 255 |
|
-
1
评分人数
-
|