[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 1# 857185187

你运行
findstr /?
看其帮助信息就知道了, 这是老的不借用非原生 exe 实现 cmd 窗口彩色输出的方案, 效率是很低的

如果 你用的 Win 10, 只要版本不是太老, 可以用 VT100 指令实现更好的彩色输出, 另外还能轻松实现窗口任意坐标的字符操作

下面是一个彩色指针时钟示例, 请在 WIN10 上运行, 包括 WIN8 在内, 老的 WINDOWS 控制台 都不支持 VT100
  1. @echo off & setlocal enabledelayedexpansion
  2. >nul chcp 437
  3. (for /f "delims==" %%a in ('set') do set "%%a=") & set "Path=%SystemRoot%\system32"
  4. for /F %%a in ('echo prompt $E^| cmd') do set "_ESC=%%a"
  5. set "_PEN=#"
  6. set "_PEN_SCALE=*"
  7. set /a "_SIZE=51" & REM Set the size of the clock, recommended from 37 to 100
  8. set /a "_LOW_LIMIT_OF_WIDTH_OF_FIFTEEN_SEGMENT_DISPLAY=37"
  9. set /a "_s=(_SIZE-15)>>31, _SIZE=(_LOW_LIMIT_OF_WIDTH_OF_FIFTEEN_SEGMENT_DISPLAY&_s)+(_SIZE&~_s)" & REM size lower limit: 37
  10. set /a "_WID=_HEI=_SIZE|1,_R_FACE=_WID/2-1, _R_FACE_SQ=_R_FACE*_R_FACE, _R_FACE_1=_R_FACE-1,_R_FACE_2=_R_FACE-2"
  11. set /a "_LEFT_FIFTEEN_SEGMENT_DISPLAY=(_WID-_LOW_LIMIT_OF_WIDTH_OF_FIFTEEN_SEGMENT_DISPLAY)/2+1, _TOP_FIFTEEN_SEGMENT_DISPLAY=_WID/2+_R_FACE/4"
  12. color 0F & mode %_WID%,%_HEI%
  13. REM The work that needs "Path" is done, now you can clean it up.
  14. set "Path="
  15. set "_SIN=(#-#*#/1875*#/320000+#*#/1875*#/15625*#/16000*#/2560000-#*#/1875*#/15360*#/15625*#/15625*#/16000*#/44800000)"
  16. set "_COS=(10000-#*#/20000+#*#/1875*#/15625*#/819200-#*#/1875*#/15360*#/15625*#/15625*#/10240000+#*#/1875*#/15360*#/15625*#/15625*#/16000*#/15625*#/229376000)"
  17. REM 角度常量, 不直接用字面数值, 让 宏代码 定义更易读
  18. set /a "_PI=31416, _2PI=2*_PI, _PI#2=_PI/2, _3PI#2=3*_PI/2, _3PI#2_1=_3PI#2-1"
  19. set "_SIN(t)=(#=(t) %% %_2PI%, #+=#>>31&%_2PI%, #1=(#-%_PI#2%^#-%_3PI#2%)>>31, #3=%_3PI#2_1%-#>>31, #=(-#&#1)+(#&~#1)+(%_PI%&#1)+(-%_2PI%&#3), %_SIN%)"
  20. set "_COS(t)=(#=(t) %% %_2PI%, #+=#>>31&%_2PI%, #1=(#-%_PI#2%^#-%_3PI#2%)>>31, #3=%_3PI#2_1%-#>>31, #=(-#&#1)+(#&~#1)+(%_PI%&#1)+(-%_2PI%&#3), #=%_COS%, (-#&#1)+(#&~#1))"
  21. set "_SIN(t),_COS(t)=(#=(t) %% %_2PI%, #+=#>>31&%_2PI%, #1=(#-%_PI#2%^#-%_3PI#2%)>>31, #3=%_3PI#2_1%-#>>31, #=(-#&#1)+(#&~#1)+(%_PI%&#1)+(-%_2PI%&#3), #S=%_SIN%, #=%_COS%, #C=(-#&#1)+(#&~#1))"
  22. set /a "_DEG=_PI/180, _6DEG=6*_PI/180, _30DEG=30*_PI/180, _3.6DEG=36*_PI/(180*10)"
  23. set /a "_XCZOOM = 10000 * _WID/2, _XC=_WID/2+1, _YCZOOM = 10000 * _HEI/2, _YC=_HEI/2+1, _TH0=-_PI#2"
  24. set /a "_2XC=2*_XC, _2YC=2*_YC"
  25. <nul set /p "=%_ESC%[?25l" & REM ESC [ ? 25 l  DECTCEM   Text Cursor Enable Mode Hide  Hide the cursor
  26. set "_RGB_SCALE=0;0;255"
  27. set "_RGB_FACE=255;255;255"
  28. set "$erase_last_pin="
  29. set /a "_DENSITY=150, _SPEED=3*%_DEG%, th=_TH0"
  30. set /a "_CENTISECONDS_OF_A_DAY=24*60*60*100"
  31. set "_LEFT37DOWN1=%_ESC%[37D%_ESC%[1B"
  32. REM 每 _GAP 帧计算一次 FPS, ! _GAP 必须是 2 的幂, 并且不小于 2
  33. set /a "_GAP=2<<5"
  34. (
  35.     for /f "delims==" %%a in ('set _') do set "%%a="
  36.     set /a "_PIN_LEN_S=%_R_FACE%-3,_PIN_LEN_M=_PIN_LEN_S-1,_PIN_LEN_H=_PIN_LEN_S/2+%_SIZE%/15,_PIN_LEN_C=_PIN_LEN_S/4-0"
  37.     set "_RGB_C=0;255;0"
  38.     set "_RGB_S=255;0;0"
  39.     set "_RGB_M=100;100;100"
  40.     set "_RGB_H=0;0;0"
  41.     <nul set /p "=%_ESC%[48;2;%_RGB_FACE%m"
  42.     REM gen clock dial: Distance method, quick but not meticulous
  43.     for /L %%x in (%_XC% -1 1) do (
  44.         for /L %%y in (%_YC% -1 1) do (
  45.             set /a "_dx=%%x-%_XC%, _dy=%%y-%_YC%, t=_dx*_dx+_dy*_dy-%_R_FACE_SQ%-1"
  46.             if !t! lss 0 (
  47.                 set /a "#x_=%_2XC%-%%x, #y_=%_2YC%-%%y"
  48.                 set "$pin=%_ESC%[%%y;!#x_!H%_PEN%%_ESC%[!#y_!;%%xH%_PEN%%_ESC%[!#y_!;!#x_!H%_PEN%%_ESC%[%%y;%%xH%_PEN%!$pin!"
  49.             )
  50.         )
  51.         set "$pin=%_ESC%[38;2;%_RGB_FACE%m!$pin!"
  52.         <nul set /p "=!$pin!"
  53.         set "$pin="
  54.     )
  55.     REM gen clock dial: rotary scanning polishing edge
  56.     for /L %%i in (0 1 %_DENSITY%) do (
  57.         set /a "th+=%_SPEED%, %_SIN(t),_COS(t):t=th%, #x=(%_XCZOOM%+%_R_FACE%*#C)/10000+1, #y=(%_YCZOOM%+%_R_FACE%*#S)/10000+1, #x_=%_2XC%-#x, #y_=%_2YC%-#y"
  58.         set "$pin=%_ESC%[!#y!;!#x_!H%_PEN%%_ESC%[!#y_!;!#x!H%_PEN%%_ESC%[!#y_!;!#x_!H%_PEN%%_ESC%[!#y!;!#x!H%_PEN%!$pin!"
  59.         set "$pin=%_ESC%[38;2;%_RGB_FACE%m!$pin!"
  60.         <nul set /p "=!$pin!"
  61.         set "$pin="
  62.     )
  63.     REM nail up scale
  64.     <nul set /p "=%_ESC%[48;2;%_RGB_FACE%m"
  65.     for /L %%i in (0 1 3) do (
  66.         set /a "r3=%%i %% 3"
  67.         set /a "th=-%_PI#2% + %%i*%_2PI%/12, %_SIN(t),_COS(t):t=th%, $x=%_XCZOOM%-#C, $y=%_YCZOOM%-#S"
  68.         for /l %%a in (0 1 %_R_FACE%) do (
  69.             set /a "#x=($x+=#C)/10000+1, #y=($y+=#S)/10000+1, #x_=%_2XC%-#x, #y_=%_2YC%-#y"
  70.             if !r3!==0 (
  71.                 if %%a geq %_R_FACE_2% if %%a lss %_R_FACE% (
  72.                     set "$pin=%_ESC%[!#y!;!#x!H%_PEN_SCALE%%_ESC%[!#y_!;!#x_!H%_PEN_SCALE%%_ESC%[!#y!;!#x_!H%_PEN_SCALE%%_ESC%[!#y_!;!#x!H%_PEN_SCALE%!$pin!"
  73.                 )
  74.             ) else (
  75.                 if %%a equ %_R_FACE_1% (
  76.                     set "$pin=%_ESC%[!#y!;!#x!H%_PEN_SCALE%%_ESC%[!#y_!;!#x_!H%_PEN_SCALE%%_ESC%[!#y!;!#x_!H%_PEN_SCALE%%_ESC%[!#y_!;!#x!H%_PEN_SCALE%!$pin!"
  77.                 )
  78.             )
  79.         )
  80.         set "$pin=%_ESC%[38;2;%_RGB_SCALE%m!$pin!"
  81.         <nul set /p "=!$erase_last_pin!!$pin!"
  82.         set "$pin="
  83.     )
  84.     <nul set /p "=%_ESC%[48;2;%_RGB_FACE%m"
  85.     set /a "_cnt=0, $v=0"
  86.     for /L %%i in () do (
  87.         set "tm=!time: =0!" & set /a "SS=1!tm:~6,2!-100, MM=1!tm:~3,2!-100, HH=1!tm:~0,2!-100, CC=1!tm:~-2!-100"
  88.         set /a "th_S=-%_PI#2% + (SS * 100 + CC) * %_6DEG% / 100, th_M=-%_PI#2% + (MM * 60 + SS) * %_DEG% / 10, th_H=-%_PI#2% + ((HH * 60 + MM) * 60 + SS) * %_DEG% / 120, th_C=-%_PI#2% + CC*%_3.6DEG%"
  89.         REM Draw 4 pointers
  90.         for %%K in (C S M H) do (
  91.             set /a "th=th_%%K, %_SIN(t),_COS(t):t=th%, $x=%_XCZOOM%-#C, $y=%_YCZOOM%-#S"
  92.             for /l %%a in (0 1 !_PIN_LEN_%%K!) do (
  93.                 set /a "#x=($x+=#C)/10000+1, #y=($y+=#S)/10000+1"
  94.                 set "$pin=%_ESC%[!#y!;!#x!H%_PEN%!$pin!"
  95.             )
  96.             set "$pin=%_ESC%[38;2;!_RGB_%%K!m!$pin!"
  97.         )
  98.         <nul set /p "=!$erase_last_pin!!$pin!"
  99.         set "$erase_last_pin=!$pin:%_PEN%= !"
  100.         set "$pin="
  101.         title !tm! pointer_clock_WIN10
  102.         set /a "t=-((_cnt+=1)&(%_GAP%-1))>>31, $$=($u=((HH*60+MM)*60+SS)*100+CC)-$v, $$+=$$>>31&%_CENTISECONDS_OF_A_DAY%, $$=(~t&$$)+(t&1), FPS=(~t&(100*%_GAP%/$$))+(t&FPS), $v=(~t&$u)+(t&$v)"
  103.         if !t!==0 (
  104.             <nul set /p "=%_ESC%[48;2;0;0;0m%_ESC%[1;1HFPS:!FPS! %_ESC%[48;2;%_RGB_FACE%m"
  105.         )
  106.     )
  107. )
  108. >nul pause
  109. exit
复制代码

TOP

返回列表