本帖最后由 hnfeng 于 2024-7-15 22:58 编辑
从Win10开始,你可以用ANSI的esc转义序列在CMD、批处理等里面使用更多的功能,例如:
可以指定光标移动,以便在特定行列位置显示字符,这可以用于以前无法实现的功能,例如批处理运行中的显示信息、进度条等等;
可以指定信息滚动的区域,得到特殊的输出效果,例如CMD中1-5行显示一些固定信息,6-15行滚动显示批处理运行中的信息;
可以针对已经显示的信息进行插入行、删除行、插入字、删除字等操作,这在以前是不可想象的;
可以使用更多的字符和背景颜色,也可以参见我的另一个帖子:http://bbs.bathome.net/thread-69258-1-1.html
还有其他功能等着你发现
如果你想试验,我提醒一下:
ESC转义,是以ESC开始的一些控制符,
ESC在CMD里面,是 Ctrl+[ 输入
在一些编辑软件中例如Notpad2,3,4 里面,ESC可以 Alt+27 输入
在某些编辑软件中例如UltraEdit里面,需要在菜单 编辑-插入项目-文字字符,按ESC键输入
在批处理里面,也可以使用下面两种纯文字方法设置一个变量来使用- for /f "delims=#" %%i in ('prompt #$E#^&echo on^&for %%a in ^(1^) do rem') do set EscK=%%i
复制代码 或- for /F %%a in ('echo prompt $E ^| cmd') do set "EscK=%%a"
复制代码 还有:使用 echo 的方法,默认是会换行的,使用 set /p 的方法,默认不换行,当然,使用 echo 的方法时,可以加入 nA 就能让光标返回,相当于不换行
你在 CMD 窗口中试试:(里面的 ^[ 实际是 Ctrl+[ )- for /L %a in (1,1,10) do (@echo ^[[3A^[[36m%a_%a_%a^[[m&ping -n 2 127.1>nul)
复制代码 批处理:- @echo off
- for /F %%a in ('echo prompt $E ^| cmd') do set "EscK=%%a"
- echo;&echo;&echo;&echo;
- for /L %%a in (1,1,10) do (
- echo %EscK%[1A%EscK%[36m%%a_%%a_%%a%EscK%[0m
- ping -n 2 127.1>nul)
- )
- pause
复制代码 ===============================
下面列出部分转义功能
%EscK%[nA 光标向上移动n行
%EscK%[nB 光标向下移动n行
%EscK%[nC 光标向右移动n个位
%EscK%[nD 光标向左移动n个位
%EscK%[nE 光标移到下面第n行的开头
%EscK%[nF 光标移到上面第n行的开头
%EscK%[nG 光标移到第n列
%EscK%[nd 光标移到第n行 ?
%EscK%[n;mH 光标移到第n行第m列(1为左上角)。如果省略默认为1,即 %EscK%[;2H = %EscK%[1;2H,即 %EscK%[3;1H = %EscK%[3;H = %EscK%[3H
%EscK%[n;mf 与 %EscK%[n;mH 相同
%EscK%[nJ 清除屏幕的部分区域。
如果n是0(或缺失),则清除从光标位置到屏幕末尾的部分。
如果n是1,则清除从光标位置到屏幕开头的部分。
如果n是2,则清除整个屏幕。
如果n是3,则清除整个屏幕,并删除回滚缓存区中的所有行。
%EscK%[nK 清除行内的部分区域。
如果n是0(或缺失),清除从光标位置到该行末尾的部分。
如果n是1,清除从光标位置到该行开头的部分。
如果n是2,清除整行。光标位置不变。
%EscK%[6n 以ESC[n;mR(就像在键盘上输入)向应用程序报告光标位置(CPR),其中n是行,m是列。
%EscK%[s 保存光标的当前位置。
%EscK%[u 恢复保存的光标位置。
%EscK%[nS 整页向上滚动n(默认1)行。新行添加到底部。
%EscK%[nT 整页向下滚动n(默认1)行。新行添加到顶部。
%EscK%[n;mr 设置滚动区域
%EscK%[nS 向上滚动滚动区域
%EscK%[nT 向下滚动滚动区域
%EscK%[nX 擦除字符
%EscK%[nL 插入行
%EscK%[nM 删除行
%EscK%[n@ 插入字符
%EscK%[nP 删除字符
%EscK%[8;n;mt 调整CMD窗口为n行m列
%EscK%[nm 设置SGR参数,包括文字颜色(8/16色,256色,24位色). 如果没有参数,则视为 %EscK%[0m(重置/默认/常规)
<ForegroundColor> 前景色,[BackgroundColor] 背景色
1. 3/4位色(8/16色):
前景色 30-黑,31-红,32-绿,33-黄,34-蓝,35-品红,36-青,37-白
16色就是加上高亮的8色
开始高亮前景 [1;
关闭高亮前景 [22;
90-灰,91-亮红,92-亮绿,93-亮黄,94-亮蓝,95-亮品红,96-亮青,97-亮白
背景色 40-黑,41-红,42-绿,43-黄,44-蓝,45-品红,46-青,47-白
高亮背景色 100-灰,101-亮红,102-亮绿,103-亮黄,104-亮蓝,105-亮品红,106-亮青,107-亮白
2. 8位色(256色):
256色前景色及引导 [38;5;n
256色背景色及引导 [48;5;n
n为颜色值:
0-黑,1-红, 2-绿, 3-黄, 4-蓝, 5-品红, 6-青, 7-白
8-灰, 9-亮红,10-亮绿,11-亮黄,12-亮蓝,13-亮品红,14-亮青,15-亮白
16 至 231 :多种颜色
232 至 255:灰度,从较黑到较白(0最黑,15最白)
3. 24位色(RGB):
24位色前景色及引导 [38;2;R;G;B
24位色背景色及引导 [48;2;R;G;B
0 <= R,G,B <=255
30-37:3/4位色前景色; 38;5;n:设置前景色(8位);38;2;r;g;b:设置前景色(24位)
40-47:3/4位色背景色; 48;5;n:设置背景色(8位);48;2;r;g;b:设置背景色(24位)
恢复默认:[0m/[m ;高亮开关:[1m/22m ;下划线开关:[4m/[24m ;反显开关:[7m/[27m
未试验出来:闪烁开关:[5m/[25m ;隐藏(前景背景色一样)开关:[8m/[28m ;
划掉开关:[9m/[29m;上划线开关:[53m/[55m |