中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 08:05
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 【原创】colstr函数---单行输出彩色字符
可打印版本  6,129 / 38
第1楼 jvive 发表于 2008-03-31 21:40
初级用户 发帖 17 积分 122
【原创】colstr函数---单行输出彩色字符
原帖已成古董,
点此下载

更新帖点此:(2楼)

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

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

[ Last edited by jvive on 2009-4-24 at 05:52 ]
第2楼 qwd 发表于 2008-03-31 22:07
初级用户 发帖 56 积分 161
刚写的中国象棋正好需要这个!
顶!
第3楼 zh159 发表于 2008-03-31 23:07
金牌会员 发帖 1,467 积分 3,687
利用findstr /a:参数来输出彩色字符不错
第4楼 niao22 发表于 2008-03-31 23:25
新手上路 发帖 7 积分 14
才搞明白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楼 Climbing 发表于 2008-04-01 00:38
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
还真不容易看懂啊,怎么琢磨的啊?我可是费了将近20分钟的时间才大概看明白是怎么实现的。

关键处在:

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


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

不知道我分析的对不对?
第6楼 cooray 发表于 2008-04-03 14:15
初级用户 发帖 34 积分 71
好东西啊,今天没分了,下次再加
第7楼 Shinaterry 发表于 2008-04-03 15:08
初级用户 发帖 51 积分 97
利害利害..
第8楼 qianmo717 发表于 2008-04-04 10:10
初级用户 发帖 32 积分 68
学入门教程的时候就被告知,批处理是不能一屏显示多种颜色的,现在这种理论是不是成立呢?
请问“右键暂停,左键继续”是怎样实现的。

[ Last edited by qianmo717 on 2008-4-4 at 10:15 AM ]
第9楼 qq43142691 发表于 2008-04-04 13:58
中级用户 发帖 152 积分 326
佩服佩服。。
第10楼 Shinaterry 发表于 2008-04-05 19:33
初级用户 发帖 51 积分 97
不解: 为什么每一次输出, 后面都会莫明其妙多出一个字符":"?
第11楼 plp626 发表于 2008-04-05 20:29
银牌会员 发帖 1,020 积分 2,278
用的是findstr /a参数,冒号当然会有了

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



附图:


[ Last edited by plp626 on 2008-4-23 at 11:44 PM ]
第12楼 Shinaterry 发表于 2008-04-05 20:38
初级用户 发帖 51 积分 97
唉! 算了! 反正可以删除..
第13楼 plp626 发表于 2008-04-05 20:49
银牌会员 发帖 1,020 积分 2,278
删除什么?

不理解
第14楼 Shinaterry 发表于 2008-04-07 01:05
初级用户 发帖 51 积分 97
删除冒号!

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

请问 LZ/plp626 有没有好的解决方法呢? (需保留最后的空格)
第15楼 terse 发表于 2008-04-07 12:39
银牌会员 发帖 946 积分 2,404
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
)
1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023