
ANSI的esc轉義序列功能強大有網友有興趣研究研究嗎最后由 hnfeng 于 -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
nclick="copycode($('code0'));">復制代碼
或
- for /F %%a in ('echo prompt $E ^| cmd') do set EscK=%%a
nclick="copycode($('code1'));">復制代碼
還有:使用 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)
nclick="copycode($('code2'));">復制代碼
批處理:
- @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
nclick="copycode($('code3'));">復制代碼
===============================下面列出部分轉義功能%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;n256色背景色及引導 [48;5;nn為顏色值: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;B24位色背景色及引導 [48;2;R;G;B0 <= R,G,B <=25530-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