[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理findstr显示彩色字符的详细讲解

找了一晚上资料没弄懂这个命令到底是怎么回事,光知道是干什么的,但不知道原理:
比如我建立一个文件为haha1,文件中内容为1234,又建立haha2,文件内容5678,然后写了bat文件:
@echo off
findstr /a:e .* ha*
pause>nul

运行结果是haha1(黄色字体)1234haha2(黄色字体)5678

我不明白的是,这是为什么,findstr的作用不是从文件中找匹配的字符串吗?按照这个理解,应该从文件ha*中,即从所有以ha打头的文件中提取含有.*字符的行,为什么会有带了颜色的文件名字出现呢?

另外一个问题是专门针对.*这个通配符的用法,看cmd中帮助很不理解,*代表前字符出现0或0以上的次数,不明白什么意思,我发现如果在某文件中寻找匹配项的时候,把匹配项写成.*和1*,2*......9*,或者a*,b*....z*都一样,都是提取所有的字符。请知道的人详细解释一下findstr的用法,万分感谢!【】

[ 本帖最后由 lovebatworld 于 2009-3-15 13:18 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

话说这个命令我也不太懂,呼叫Batcher

TOP

貌似在Vista下不标色

TOP

昨晚研究了一个通宵,未果,发帖求助,睡觉,梦中灵光一闪,居然被我想通了第一个问题:为什么会有彩色字符出现。因为我findstr最后文件名处使用了通配符,意思是在所有文件夹中寻找匹配的字符,那么由于通配符的作用,findstr必须告诉用户,最终找到的匹配的字符分别来自于具体的哪个文件,所以才出现了一下这种格式:haha1:1234  haha2:5678,(有冒号,昨晚漏写了),并且允许将文件名字以指定醒目的颜色标注出来,也就是说利用了findstr的这种准确描述字符出处的输出,来实现了字符的彩色输出。好棒的命令!至于后面那个问题,等达人来讲解,谢谢!
1

评分人数

TOP

看cmd中帮助很不理解,*代表前字符出现0或0以上的次数,不明白什么意思,我发现如果在某文件中寻找匹配项的时候,把匹配项写成.*和1*,2*......9*,或者a*,b*....z*都一样,都是提取所有的字符。

根据帮助文档的说法,1*就表示1出现0次或者1次或者2次或者任意多次。
假设文本内容如下:
abc
123
131

findstr是以行模式进行逐行匹配的。
第一行可以认为1出现了0次,匹配成功;
第二行可以认为1出现了1次,匹配成功;
第一行可以认为1出现了2次,匹配成功;
...

a*,b*....z*同理。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

太感谢batcher了。我刚用你的讲解试验了一下,终于明白了,比如我建一个文件test.txt,里面写三行字符串:
abcdef
回车
ghi
然后通过下面不同的命令对应不同的结果,更好的看出规律:
findstr  . test.txt  结果:
abcdef
ghi
解释:只有一个.  输出所有字符,不包括换行
-----------------------------------------------
findstr  .* test.txt  结果:
abcdef

ghi
解释:.* 输出所有字符,包括换行
-----------------------------------------------
findstr  1* test.txt  结果同上,  同理,这个1换成任意数字或字母,结果都一样。
------------------------------------------------
findstr  a1* test.txt  结果:
abcdef
解释:找出出现一个a,以及a后面出现过0次或者任意次1的字符行,所以只有第一行符合条件。
--------------------------------------------------
findstr  ab1* test.txt  结果:
abcdef
解释:找出出现一个“ab”字符串,以及b后面出现过0次或者任意次1的字符行,所以只有第一行符合条件。同理如果你写成ab1*,bc1*,cd1*都一样。
------------------------------------------------
findstr  ac* test.txt  结果:
abcdef
解释:道理同a1*的情况,找出出现一个a,以及a后面出现过0次或者任意次c的字符行,所以只有第一行符合条件。。同理如果你写成ab*,ad*,ae*都一样。
------------------------------------------------------
findstr  ac1* test.txt  结果:

解释:找出出现一个"ac"字符串,以及c后面出现过0次或者任意次1的字符,由于这3行均没有出现ac连在一起的情况,所以均不符合。
-----------------------------------------------------

看了以上的几种情况,我相信大家基本可以举一反三列出更多的情况并加以理解了吧。

谢谢batcher!

[ 本帖最后由 lovebatworld 于 2009-3-15 12:00 编辑 ]
1

评分人数

TOP

学习了 我也在研究怎么显示不同颜色的字符 原来是这个:findstr

TOP

返回列表