|
|
本帖最后由 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 |
|
评分
-
查看全部评分
|