中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】colstr函数---单行输出彩色字符
« [1] [2] [3] »
作者:
标题: 【原创】colstr函数---单行输出彩色字符 上一主题 | 下一主题
jvive
初级用户

替身



积分 122
发帖 17
注册 2008-3-27
状态 离线
『楼 主』:  【原创】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 ]

   此帖被 +59 点积分       点击查看详情   
评分人:【 zh159 分数: +10  时间:2008-3-31 23:07
评分人:【 Climbing 分数: +10  时间:2008-4-1 00:38
评分人:【 Shinaterry 分数: +2  时间:2008-4-3 15:09
评分人:【 qzwqzw 分数: +9  时间:2008-4-3 21:00
评分人:【 cooray 分数: +2  时间:2008-4-4 01:16
评分人:【 ThinKing 分数: +4  时间:2008-4-7 10:29
评分人:【 PPdos 分数: +4  时间:2008-4-9 03:26
评分人:【 lxy2007 分数: +1  时间:2008-4-11 13:09
评分人:【 plp626 分数: +15  时间:2008-4-25 14:02
评分人:【 qinchun36 分数: +2  时间:2009-1-15 22:04




进入网盘(各种工具)
2008-3-31 21:40
查看资料  发短消息 网志  OICQ (275928264)  编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 2 楼』:  刚写的中国象棋正好需要这个!

顶!

2008-3-31 22:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

利用findstr /a:参数来输出彩色字符不错



2008-3-31 23:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
niao22
新手上路





积分 14
发帖 7
注册 2008-3-31
状态 离线
『第 4 楼』:  

才搞明白FINDSTR的用法

在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

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

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

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

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。

2008-3-31 23:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 5 楼』:  

还真不容易看懂啊,怎么琢磨的啊?我可是费了将近20分钟的时间才大概看明白是怎么实现的。

关键处在:

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

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

不知道我分析的对不对?

   此帖被 +9 点积分       点击查看详情   
评分人:【 jvive 分数: +2  时间:2008-4-2 22:40
评分人:【 qzwqzw 分数: +7  时间:2008-4-3 21:00




偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2008-4-1 00:38
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
cooray
初级用户





积分 71
发帖 34
注册 2007-9-7
状态 离线
『第 6 楼』:  

好东西啊,今天没分了,下次再加

2008-4-3 14:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Shinaterry
初级用户





积分 97
发帖 51
注册 2008-3-19
状态 离线
『第 7 楼』:  

利害利害..

2008-4-3 15:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qianmo717
初级用户





积分 68
发帖 32
注册 2007-12-9
状态 离线
『第 8 楼』:  

学入门教程的时候就被告知,批处理是不能一屏显示多种颜色的,现在这种理论是不是成立呢?
请问“右键暂停,左键继续”是怎样实现的。

[ Last edited by qianmo717 on 2008-4-4 at 10:15 AM ]

2008-4-4 10:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qq43142691
中级用户





积分 327
发帖 152
注册 2007-5-4
状态 离线
『第 9 楼』:  

佩服佩服。。

2008-4-4 13:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Shinaterry
初级用户





积分 97
发帖 51
注册 2008-3-19
状态 离线
『第 10 楼』:  

不解: 为什么每一次输出, 后面都会莫明其妙多出一个字符":"?

2008-4-5 19:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 11 楼』:  

用的是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学习
2008-4-5 20:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Shinaterry
初级用户





积分 97
发帖 51
注册 2008-3-19
状态 离线
『第 12 楼』:  

唉! 算了! 反正可以删除..

2008-4-5 20:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 13 楼』:  

删除什么?

不理解



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

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-5 20:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Shinaterry
初级用户





积分 97
发帖 51
注册 2008-3-19
状态 离线
『第 14 楼』:  

删除冒号!

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

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

2008-4-7 01:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 15 楼』:  



  Quote:
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
)



简单!简单!再简单!
2008-4-7 12:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: