Board logo

标题: [文本处理] [已解决]怎样解释批处理单行显示彩色字函数colorthestr? [打印本页]

作者: abcdshenji    时间: 2011-3-12 18:43     标题: [已解决]怎样解释批处理单行显示彩色字函数colorthestr?

今天在bathhome上看到一段单行显示彩色字的代码。。有点不太明白。。
  1. @echo off
  2. :::ColorTheStr [str1=显示字符] [str2=着色字符] [str3=显示字符]
  3. echo;
  4. call :ColorTheStr "曾经,有一份真挚的" "爱情" "放在我的面前。" 0a
  5. pause>nul
  6. :ColorTheStr
  7. set "objStr=%~2"
  8. if "%objStr%"=="" set objStr=[未定义]
  9. set /p=%~1<nul
  10. set /p="%~3  "<nul>%objStr%
  11. findstr /a:%~4 .* "%objStr%*"
  12. del /q "%objStr%"
  13. goto :eof
复制代码
不太明白set /p="%~3  "<nul>%objStr%的意思。。。%~3前面有一个退格符后面还有两个空格两个退格符。。什么意思?而且最后要>%objstr%又是为什么?

[ 本帖最后由 abcdshenji 于 2011-3-13 14:27 编辑 ]
作者: yuexiang6688    时间: 2011-3-12 20:18

顶!!!!!!!!!!!!!!11
作者: neorobin    时间: 2011-3-12 20:37

CMD里显示彩色文字
http://bbs.bathome.net/thread-1852-1-1.html

批处理单行输出彩色字符
http://bbs.bathome.net/thread-1853-1-1.html

批处理单行显示多种颜色字符
http://bbs.bathome.net/thread-1854-1-1.html

批处理显示彩色字符的原理及其中退格符的作用
http://bbs.bathome.net/viewthread.php?tid=1331#pid11864

http://www.bathome.net/viewthread.php?tid=6711&page=1#pid43524

[ 本帖最后由 neorobin 于 2011-3-12 20:39 编辑 ]
作者: weichenxiehou    时间: 2011-3-12 22:44

cmd中的彩色显示基本原理是基于findstr 命令的/a开关,格式:findstr /a:颜色值 "搜索内容" 目标文件,要想彩色显示成功,文件名部分需要含有通配符*或?,楼主可以随便建一个文本文件a.txt,里面随便放一些字符,执行findstr /a:27 .* a.txt*就可以看到效果了,注意代码中的.*表示搜索任意内容,更加要注意文件名部分中的通配符*,是不是搜索的结果是文件名部分被彩色显示了?这就是彩色显示的关键所在了,就是要彩色显示什么字符,就要建立一个以这些字符命名的文件,也就能达到彩色显示的效果了,注意文件名后面是不是有一个讨厌的冒号?这也就是退格键的妙用,用于删除这个冒号,懂了没?慢慢体会……
作者: abcdshenji    时间: 2011-3-13 00:15     标题: 回复 4楼 的帖子

这些我都知道。。只是其中的一些细节没办法消化。。我不太明白set /p="%~3  "<nul>%objStr%的意思。。。%~3前面有一个退格符后面还有两个空格两个退格符。。什么意思?而且最后要>%objstr%又是为什么?
我真想哪位高手能把这句
  1. set /p="%~3  "<nul>%objStr%
复制代码
]详详细细的肢解分析一遍。。我想那样会少走几步弯路。。期待ing
作者: weichenxiehou    时间: 2011-3-13 09:11     标题: 回复 5楼 的帖子

set /p="%~3  "<nul>%objStr%这句的意思是将""%~3   "(不包括引号)重定向到以"%objstr%"命名的文本文件,就这段代码而言就是,将“放在我的面前。  ”重定向到文件“爱情”,如果没有%~3前面的退格符,用findstr执行的结果会是:曾经,有一份真挚的爱情:放在我的面前。(“爱情”彩色显示,因为它是文件名,并且“爱情”后面会有一个冒号),%~3前面的这个退格符就是用于删除这个冒号,至于后面的两个退格符,我觉得应该是作者弄着玩儿的,显示两个空格,然后用两个退格键删除,达到混淆读者的目的。
作者: wc726842270    时间: 2011-3-13 10:08     标题: 回复 6楼 的帖子

这里用“退格键删除”不太正确啊。它所能达到的效果是—在CMD窗口中的一种欺骗。并不是真正的“删除”
作者: CrLf    时间: 2011-3-13 10:22

删除的效果是通过退格键+空格或者tab达到的,退格键在我看来更像键盘上的left键+insert开关
作者: wc726842270    时间: 2011-3-13 10:26     标题: 回复 8楼 的帖子

  1. @echo off
  2. set var=123
  3. set a=%var% 
  4. >1.txt echo %a%
  5. pause>nul
复制代码
试一下吧。看看1。TXT里的内容
作者: CrLf    时间: 2011-3-13 11:05

噢&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
作者: abcdshenji    时间: 2011-3-13 14:18     标题: 回复 6楼 的帖子

谢谢大哥。。。解析的很明白。。高手就是不一样。。作者也真是的。。非要加两个空格再加两个退格。。搞得稀里糊涂。。以后有问题还想您请教。。谢谢
作者: weichenxiehou    时间: 2011-3-13 18:51

不用谢哈,咱们都是菜鸟,我也是在各位前辈的指导下慢慢知道怎么用的,细心学习嘛,咱们共同提高。
作者: garyng    时间: 2011-8-10 18:29

试过了~
蛮好用的~
也更了解findstr的用法~
谢谢各位的解释~
我这只菜鸟及时才能看懂这些代码啊~




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