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

[ZT]批处理colstr函数---单行输出彩色字符

  1. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. ::彩色字符控制输出{code by Jvive@cn-dos.net|2008-4-9}
  3. ::call:Colstr <attr> <sp> <"str"> <bk> <sp> <enter>  
  4. ::               |     |     |      |    |     |
  5. ::             颜色   空格  字符串   退格  空格 回车换行
  6. ::效率:      约18次/s  (XP 5.1/2.4GHz/256M)      
  7. ::批文件使用格式:
  8. ::       文件名 <attr> <sp> <"str"> <bk> <sp> <enter>
  9. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10. ::说明:
  11. ::   attr   16进位数字颜色属性。请参考16进位数字颜色属性配置演示代码。
  12. ::   sp     范围:{0,正整数} 表示输出空格的格数
  13. ::  "str"   要显示的字符串。注意当字符串中含有空格时带上双引号。
  14. ::   bk     范围:{正整数} 退格数,即光标左移位数,若设定左移位数为0,函数将强制转换为1
  15. ::   sp     范围:{0,正整数} 0将输出1个冒号,其他正整数表示空格数
  16. ::   enter  范围:{0,正整数} 0表示不换行(光标不动),其他正整数表示<enter>个数
  17. ::   字符串中可以包含除/\:*?,<>|"字符外的任何字符,但不可以全是“空格”或“.”等。
  18. ::   判断字符串是否合法的一个有效的办法是看它是否可以作为文件名来使用
  19. ::   请勿试图尝试不合法的参数,函数只保证合法的参数有正确的效果。
  20. ::   另外,对某些特殊要求可以尝试用0100色(黑色)字符来“隐藏”冒号
  21. ::例:
  22. ::call:colstr 0c 3 "abcdef" 1 2 2
  23. ::用0c色(鲜红色)依次输出3个空格 abcdef: [光标左移1位] 2个空格 2个回车换行符。
  24. ::出处:http://www.cn-dos.net/forum/viewthread.php?tid=38940
  25. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  26. @echo off
  27. ::Colstr函数演示。
  28. mode con lines=24 cols=69
  29. set s=I am from www.cn-dos.net
  30. echo\&echo\&echo\&echo\&echo\&echo\&echo/
  31. call:colstr e 15 "%s%" 0 1 0
  32. call:colstr 0100 0 0 17 0 0
  33. title 按任意键继续...&pause>nul
  34. call:colstr a 1 "中国 DOS 联盟" 0 1 0
  35. call:colstr c 0 "%s:~-15%" 0 1 9
  36. pause>nul
  37. call:colstr 2c 21 "谢谢测试!    有bug请吱一声" 0 1 9
  38. title Jvive QQ∶275928264
  39. pause>nul&exit/b
  40. rem /*--------- colstr 函数 -------------
  41. :Colstr <attr> <sp> <"str"> <bk> <sp> <enter>
  42. for %%a in (+%2 +%4 +%5 +%6) do (
  43.    if "%%a"=="+" echo 控制参数不能为空&exit/b
  44.    if %%a lss +0 echo 参数越界-&exit/b
  45.    if %%a geq +a echo 参数越界+&exit/b)
  46. if %3 == "" echo 字符串不能为空&exit/b
  47. pushd %tmp%&setlocal ENABLEEXTENSIONS
  48. if exist "%~3?" del/a/q "%~3?">nul 2>nul
  49. if %2 gtr 0 call:%0_bs %2 sp " "&call set/p=%%sp%%<nul
  50. if %4 gtr 0 (call:%0_bs %4 bk "") else set "bk="
  51. call:%0_bs %5 sp " "
  52. set/p=%bk%%sp%<nul>"%~3"&findstr /a:%1 .* "%~3?" 2>nul
  53. if not %6 equ 0 for /l %%a in (1 1 %6)do echo.
  54. endlocal&popd&goto:eof
  55. :Colstr_bs
  56. set "p="&for /l %%a in (1 1 %1)do call set "p=%%p%%%~3"
  57. set "%2=%p%"&goto:eof
  58. rem ------------------------------------*/
复制代码
思路:
findstr /a .... (提供了好几万种颜色)
set/p=<nul>输出不换行退格字符,退格字符”删“冒号."<nul"实现单行彩色

另附代码:
十六进位数字的颜色属性配置演示
  1. @echo off
  2. title by jvive@cn-dos.net date: 08-04-03
  3. set "a=abcdefg 哈哈o(∩_∩)o"
  4. set hint="自动浏览点是,手动输入点否,退出点取消"
  5. set "att=4163"
  6. set titl="十六进位颜色属性配置演示"
  7. call:choice %hint% %att% %titl% browse input
  8. del "%a%" &goto:eof
  9. rem -------------module browse-----------
  10. :browse
  11. set col=0 1 2 3 4 5 6 7 8 9 a b c d e f
  12. title 点击右键暂停,左键继续
  13. for %%a in (%col%)do for %%b in (%col%)do for %%c in (%col%)do for %%d in (%col%)do (
  14. call:JV %%a%%b%%c%%d "%a%"
  15. echo ---- 配色属性:%%a%%b%%c%%d
  16. )
  17. goto:eof
  18. rem -------------module input------------
  19. :input
  20. set "color="
  21. title 请输入一个16进制数(1-4位)[例如1EAf或2a]:
  22. set /p color=
  23. if not defined color goto:input
  24. echo 颜色属性: %color%
  25. set/p=颜色演示:<nul
  26. call:JV %color% "%a%"
  27. echo\&goto:input
  28. rem -------------subprocess--------------
  29. :choice
  30. setlocal ENABLEEXTENSIONS
  31. >%tmp%\tmp.vbs echo bar=MsgBox (%1,%2,%3):Wscript.Echo bar
  32. for /f "delims=*" %%i in ('cscript.exe //nologo %tmp%\tmp.vbs') do set v=%%i
  33. pushd %tmp%&del/q "%a%?" tmp.vbs 2>nul
  34. if "%v%"=="2" goto:eof
  35. if "%v%"=="6" call:%4
  36. if "%v%"=="7" call:%5
  37. endlocal&goto:eof
  38. :JV
  39. set/p=<nul>"%~2"
  40. findstr /a:%1 .* "%~2?" 2>nul
复制代码
原帖地址:http://www.cn-dos.net/forum/viewthread.php?tid=38940
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

返回列表