Board logo

标题: [特效代码] 批处理输出彩色字符的函数:colstr [打印本页]

作者: plp626    时间: 2009-5-30 06:34     标题: 批处理输出彩色字符的函数:colstr

此colstr.bat对非彩色字符,合理使用可处理任何字符
对于彩色字符也可以最大限度的显示出来(除了非法文件名的9个字符/*\?"<:>|其他皆可彩色显示)
:_colstr [^<attr^>:"<col-str>"^|"<com-str>"^|^<esc-Char^>];... //输出彩色字符
(if %1.==. exit/b)&setlocal enabledelayedexpansion&pushd %tmp%
for /f "tokens=1* delims=:" %%a in ("%~1")do (if %%a:%%b.==%%a:"%%~b". (set col=%%a
(for %%z in ("Gray=8";"LBlue=9";"LGreen=A";"LAqua=B";"LRed=C";"LPurple=D";"LYellow=E"
"LWhite=F";"Black=0";"Blue=1";"Green=2";"Aqua=3";"Red=4";"Purple=5";"Yellow=6";
"White=7")do set col=!col:%%~z!)&(if exist "%%~b?" del/a/q "%%~b?"2>nul)
set/p= <nul>"%%~b"2>nul&findstr/a:!col! .* "%%~b?"2>nul 3>&2) else if %1==\n (echo.
) else if %1==\b (set/p=<nul) else if %1==\q (set/p=""^"<nul) else if %1==\t (
set/p= <nul) else (set/p"=%~1"<nul))&(if %2. neq . (shift&endlocal&goto:_colstr))&exit/b
下面为colstr的帮助信息,存为bat文件双击即可(colstr子过程的代码稍排版了下便于阅读)
关于思路,大家都知道set/p= <nul>file + findstr/a:"attr" .* file?
原帖:http://www.cn-dos.net/forum/viewthread.php?tid=38940

@if %1.==. if not %prompt:~-4%==$s$h (cmd /s/k"prompt %prompt%$s$h&%0/?"&exit)
@echo off
if %1.==.   exit/b
if %1.==/?. goto:usage
if %1==/1 goto:attr1
if %1==/2 goto:attr2
if %1==/4 goto:attr4
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:_colstr [^<colorcode^>:"<color str>"^|"<common str>"^|^<escape Char^>];...
(if %1.==. exit/b)&setlocal enabledelayedexpansion&pushd %tmp%
for /f "tokens=1* delims=:" %%a in ("%~1")do (
  if %%a:%%b.==%%a:"%%~b". (set col=%%a
    for %%z in ("LBlue=9";"LGreen=A";"LAqua=B";"LRed=C";"LPurple=D";
                "LYellow=E";"LWhite=F";"Black=0";"Blue=1";"Green=2";
                "Aqua=3";"Red=4";"Purple=5";"Yellow=6";"White=7";"Gray=8";
               )do set col=!col:%%~z!
      if exist "%%~b?" del/a/q "%%~b?"2>nul
      set/p= <nul>"%%~b"2>nul&findstr/a:!col! .* "%%~b?"2>nul 3>&2
    ) else if %1==\n (echo.
    ) else if %1==\b (set/p=<nul
    ) else if %1==\q (set/p=""^"<nul
    ) else if %1==\t (set/p= <nul &rem 注意=后面不是空格,是制表符
    ) else (set/p"=%~1"<nul)
)&(if %2. neq . (shift&endlocal&goto:_colstr))&exit/b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:usage
echo.  colstr V1.1 code By plp626 On 09-5-30
echo.usage:
echo.  %~n0 [^<colorcode^>:"<color str>"^|"<common str>"^|^<escape Char^>];...
echo.
echo.^<colorcode^>:     
echo.       参看findstr /?的a参数,这里颜色属性16进制数字,
echo.       这里的颜色代码与它后面16进制颜色属性数字是等效的
echo.       Black=0   Blue=1   Green=2   Aqua=3   Red=4   Purple=5
echo        Yellow=6   White=7   Gray=8   LBlue=9   LGreen=A  
echo        LAqua=B   LRed=C   LPurple=D   LYellow=E   LWhite=F  
echo.^<color string^>:
echo.       除了非法文件名外的所有字符
echo.       另外,不可以是纯“空格”、纯“.” 不可以“空格”、“.”结尾
echo.       如果含有",;=^"其中之一给前面加上^^转义(命令行下)
echo.       如果含有惊叹号!需要给它前面加上6个^^转义(命令行下)     
echo.^<common string^>:
echo.       除了"外的所有字符, 注意对惊叹号的处理要在前面加上^
echo.^<escape char^>:
echo.   "\q"(双引号)、"\t"(制表符)、"\b"(退格)、"\n"(换行)
cmd/c %~n0 c:"[注意]";"多个字符串时用";\q;c:"^;";\q;"隔开";\n
echo.exapmple:&echo    命令行下键入:
echo.   %~n0  "欢迎发email:"; graygreen:"[email=plp626@163.com]plp626@163.com[/email]"; "  交流^!";\n;
echo.
echo 将显示:&echo.
cmd/c %~n0 "欢迎发email:  "; graylgreen:"[email=plp626@163.com]plp626@163.com[/email]"; "  交流^!";\n;\n;
echo.键入 "%~n0/1" 查看一位数字的颜色属性效果
echo.键入 "%~n0/2" 查看两位数字的颜色属性效果
echo.键入 "%~n0/4" 查看四位数字的颜色属性效果&exit/b
:attr1
for %%b in (LBlue LGreen LAqua LRed LPurple LYellow LWhite Black :
            Blue Green Aqua Red Purple Yellow White Gray
           )do if %%b==: (echo.) else cmd/c %~n0 "  ";%%b:"%%b"
echo\&&exit/b
:attr2
setlocal&set attr=0 1 2 3 4 5 6 7 8 9 a b c d e f
for %%a in (%attr%)do echo.&for %%b in (%attr%)do cmd/c %~n0 %%a%%b:"[%%a%%b]"
echo.&endlocal&exit/b
:attr4
echo     当attr为3-4位时,低两位的作用不变,高两位则输出相应的边缘线:
cmd/c %~n0 \n;"     0000 =  "&for %%b in (1 2 3 : 4 5 6 7 : 8 9 A B : C D E F)do (
    if %%b==: (echo\&echo\) else  cmd/c %~n0 "     0%%b00 = "; 0%%b00:"0";)
echo.&exit/b

作者: defanive    时间: 2009-5-30 10:37

这个么,cn-dos那边不是很早就有了么。。。
作者: Batcher    时间: 2009-5-30 11:51     标题: 回复 2楼 的帖子

这个么,你有没有注意CN-DOS那个作者是谁?
^_^
作者: plp626    时间: 2009-5-30 19:24

原帖由 defanive 于 2009-5-30 10:37 发表
这个么,cn-dos那边不是很早就有了么。。。

那个写的太粗糙,不好用,昨晚优化了N次,现在这个人性化多了,调用过程很像C语言里的那个colstr函数(C还多了一对括号),
帖以下截图:


用了才有体会。。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2