中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-27 19:32
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】colstr函数---单行输出彩色字符 查看 5,862 回复 38
楼 主 【原创】colstr函数---单行输出彩色字符 发表于 2008-03-31 21:40 ·  中国 陕西 西安 电信
初级用户
替身
积分 122
发帖 17
注册 2008-03-27 10:12
18年会员
UID 114154
性别 男
状态 离线
原帖已成古董,
点此下载

更新帖点此:(2楼)

http://www.cn-dos.net/forum/viewthread.php?tid=39777&fpage=1

可以处理除了双引号外的任何字符

[ Last edited by jvive on 2009-4-24 at 05:52 ]
本帖最近评分记录 (共 10 条) 点击查看详情
评分人分数时间
zh159 +10 2008-03-31 23:07
Climbing +10 2008-04-01 00:38
Shinaterry +2 2008-04-03 15:09
qzwqzw +9 2008-04-03 21:00
cooray +2 2008-04-04 01:16
ThinKing +4 2008-04-07 10:29
PPdos +4 2008-04-09 03:26
lxy2007 +1 2008-04-11 13:09
plp626 +15 2008-04-25 14:02
qinchun36 +2 2009-01-15 22:04
进入网盘(各种工具)
2 刚写的中国象棋正好需要这个! 发表于 2008-03-31 22:07 ·  中国 河南 郑州 联通
初级用户
★★
积分 161
发帖 56
注册 2007-10-01 00:42
18年会员
UID 98672
性别 男
状态 离线
顶!
3 发表于 2008-03-31 23:07 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
利用findstr /a:参数来输出彩色字符不错
4 发表于 2008-03-31 23:25 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 14
发帖 7
注册 2008-03-31 21:49
18年会员
UID 114595
性别 男
状态 离线
才搞明白FINDSTR的用法

在文件中寻找字符串。

FINDSTR
]
strings filename]

/B 在一行的开始配对模式。
/E 在一行的结尾配对模式。
/L 按字使用搜索字符串。
/R 将搜索字符串作为一般表达式使用。
/S 在当前目录和所有子目录中搜索
匹配文件。
/I 指定搜索不分大小写。
/X 打印完全匹配的行。
/V 只打印不包含匹配的行。
/N 在匹配的每行前打印行数。
/M 如果文件含有匹配项,只打印其文件名。
/O 在每个匹配行前打印字符偏移量。
/P 忽略有不可打印字符的文件。
/OFF 不跳过带有脱机属性集的文件。
/A:attr 指定有十六进位数字的颜色属性。请见 "color /?"
/F:file 从指定文件读文件列表 (/ 代表控制台)。
/C:string 使用指定字符串作为文字搜索字符串。
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
/D:dir 查找以分号为分隔符的目录列表
strings 要查找的文字。
filename
指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there" 。 'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
"hello there"。

一般表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类别出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
字符类别: 任何在字符集中的字符
补字符类别: 任何不在字符集中的字符
范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\<xyz 字位置: 字的开始
xyz\> 字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。
5 发表于 2008-04-01 00:38 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
还真不容易看懂啊,怎么琢磨的啊?我可是费了将近20分钟的时间才大概看明白是怎么实现的。

关键处在:

if %3 neq 1 (set/p=<nul>%2) else echo.>%2
findstr /a:%1 .* "%~2*"


其中的set/p=后面是一个退格符,将这个退格符放到%2这个文件中。
%~2应该是将%2这个变量中的所有双引号去掉,"%~2*"表示在前面生成的%2文件名后面加*号(文件中的通配符),查找的内容是.*(匹配任何内容),这样只显示一个文件名,文件内容中的退格则删除了回车字符,实现同行显示不同的颜色。高明,佩服之至,呵呵。

不知道我分析的对不对?
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
jvive +2 2008-04-02 22:40
qzwqzw +7 2008-04-03 21:00
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
6 发表于 2008-04-03 14:15 ·  中国 北京 电信
初级用户
积分 71
发帖 34
注册 2007-09-07 18:08
18年会员
UID 96808
性别 男
状态 离线
好东西啊,今天没分了,下次再加
7 发表于 2008-04-03 15:08 ·  中国 广东 珠海 电信
初级用户
★★
积分 97
发帖 51
注册 2008-03-19 15:26
18年会员
UID 113404
性别 男
状态 离线
利害利害..
8 发表于 2008-04-04 10:10 ·  中国 吉林 吉林市 联通
初级用户
积分 68
发帖 32
注册 2007-12-09 17:16
18年会员
UID 105152
性别 男
状态 离线
学入门教程的时候就被告知,批处理是不能一屏显示多种颜色的,现在这种理论是不是成立呢?
请问“右键暂停,左键继续”是怎样实现的。

[ Last edited by qianmo717 on 2008-4-4 at 10:15 AM ]
9 发表于 2008-04-04 13:58 ·  中国 广东 东莞 电信
中级用户
★★
积分 326
发帖 152
注册 2007-05-04 06:16
19年会员
UID 87412
性别 男
状态 离线
佩服佩服。。
10 发表于 2008-04-05 19:33 ·  中国 广东 珠海 电信
初级用户
★★
积分 97
发帖 51
注册 2008-03-19 15:26
18年会员
UID 113404
性别 男
状态 离线
不解: 为什么每一次输出, 后面都会莫明其妙多出一个字符":"?
11 发表于 2008-04-05 20:29 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
用的是findstr /a参数,冒号当然会有了

第二个代码给了很丰富的色彩配置,大家根据需要改啊

@echo off
::输出彩色字符
mode con lines=24 cols=69
set "a= One World !"
set "b= one Dream !"
set "c= 让我们大家一起说"
set "d=︱ bbs.cn-dos.net is our common home!"
set "e= {Author∶jvive︱08-03-31︱Thanks to∶9527}"
set "x= ︱"
set "p=★★★★★★★★★★★★★★★"
set "k="
pushd %tmp%
del/q "%a%?" "%b%?" "%c%?" "%d%?" "%e%?" "%x%?" "%p%?" 2>nul
call:enter 3
call:JV a "%a%" 0
call:JV b "%b%" 0
call:JV c "%c%" 0
call:enter 5
call:JV 0100 0 0
call:JV 040a "%d%" 0
call:JV 040a "%x%" 0
call:JV 0100 000 0
call:JV 040b "%d%" 0
call:JV 040b "%x%" 0
call:JV 0100 000 0
call:JV 0400 "%d%" 0
call:JV 0400 "%x%" 0
call:JV 0100 0 1
call:enter 3
call:JV e "%e%" 0
call:JV 0100 0 1
echo.
call:color
pause>nul&exit/b
rem ---------subprocess--------
:color|一二层第一个色调混合为主色调,最后一个为闪烁停留色调.
for %%a in (0 e)do (
for %%b in (a 1 2 3 4 5 6 7 8 0 c b d f e)do (
call set "k=%%k%%"
call:bak %%a%%b "%p%" 0
))
goto :eof
:JV
:bak
if %3 neq 1 (set/p=%k%<nul>"%~2") else echo.>"%~2"
if %0 neq :bak (set k=) else set "k=%k%"
findstr /a:%1 .* "%~2?"
del "%~2?"
goto :eof
:enter
for /l %%a in (1 1 %1)do echo.


附图:


[ Last edited by plp626 on 2008-4-23 at 11:44 PM ]
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
12 发表于 2008-04-05 20:38 ·  中国 广东 珠海 电信
初级用户
★★
积分 97
发帖 51
注册 2008-03-19 15:26
18年会员
UID 113404
性别 男
状态 离线
唉! 算了! 反正可以删除..
13 发表于 2008-04-05 20:49 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
删除什么?

不理解
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
14 发表于 2008-04-07 01:05 ·  中国 广东 珠海 电信
初级用户
★★
积分 97
发帖 51
注册 2008-03-19 15:26
18年会员
UID 113404
性别 男
状态 离线
删除冒号!

set "c= 让我们大家一起说 " -> 注意: 只要字符串最后面一带"空格", 运行就会出错..

请问 LZ/plp626 有没有好的解决方法呢? (需保留最后的空格)
15 发表于 2008-04-07 12:39 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by Shinaterry at 2008-4-7 01:05:
删除冒号!

set "c= 让我们大家一起说 " -> 注意: 只要字符串最后面一带"空格", 运行就会出错..

请问 LZ/plp626 有没有好的解决方法呢? (需保留最后的空格)


@echo off&setlocal enabledelayedexpansion
set "a= One World ! "
set "b=one Dream ! "
set "c=让我们大家一起说 "
set "d=︱ bbs.cn-dos.net is our common home! "
set "e= {Author∶jvive︱08-03-31︱Thanks to∶9527} "
set "f=★★★★★★★★★★★★★★★ "
for %%i in ("%a%" "%b%" "%c%" "%d%" "%e%" "%f%") do call:lp %%i
pause&exit
:lp
set /a p=%random%%%14
set "s=12345689abcde"
set v=!s:~%p%,1!
set /p= <nul >%1
findstr /a:0!v! .* "%~n1*"
echo.&echo.
del %1
)
简单!简单!再简单!
论坛跳转: