bat里findstr的正则表达式
发布时间:2025-05-20 20:46:17 发布人:远客网络
一、bat里findstr的正则表达式
1、首先你设定的条件是不知道该说是矛盾的还是多余的,不清楚你究竟想做什么
2、含有AB或CD或EF中的任何一个字符串,如果含有就goto a
3、注意,不含有AB或 CD时,它可能有EF,照这里条件那是要goto:b,
4、这不是矛盾吗?究竟goto:a还是goto:b你再理一理你要设的条件。
5、下面是我写的是按照你最开始指定的条件写的,
6、尽可能详细地把整个流程控制过程清晰化了,你可以参考.
7、REMBatchscriptedby"Alfredo_Shieh@blessigned.com"
8、SETLOCALENABLEDELAYEDEXPANSION
9、if/Inot"x!ComputerName:%%i=!"=="x%ComputerName%"(
10、@echoComputerName不包含"AB""CD""EF"中任何一个
二、批处理文件中 find 命令的例子
find命令的基本格式是这样的:find"要查找的字符串"要查找的文件,在这里,"要查找的字符串"这个内容是必不可少的,引号也是必须的。例如:find"bathome" d:\test.txt,表示在D盘根目录下的文本文件test.txt中查找含有 bathome这一字符串的所有行。
1、当文件中包含要查找的字符串时,将返回这个字符串所在位置的整行内容,具体格式为:第一行是"----------×××"(×××表示被查找的文件名,不包括引号对),第二行开始才出现包含字符串的整行内容;
2、当文件中没有出现要查找的字符串时,find的结果仅仅返回"----------×××"这一行内容(×××表示被查找的文件名,不包括引号对)。
在查找指定字符串的时候,有的场合需要区分大小写,有的场合则对大小写并不在意,如何实现这些需求呢?
很简单,在find的时候,添加或取消/i开关就是了,具体用法为:find/i"Abc" test.txt表示不区分大小写,文本内容中含有 Abc、abc、ABC之类的都算;find"Abc" test.txt则严格区分字符大小写,只能匹配Abc,而不能匹配abc、ABC之类的字符。
有时候,我们的需求并不是为了查找到某个字符串,而是要检测哪些行不含有特定的字符串,这个时候,可以使用开关/v,用法为:find/v"Abc" test.txt,它表示查找那些不含字符串Abc的行(Abc要区分大小写),如果不区分abc的大小写,那么,应该写成 find/i/v"Abc" test.txt。
有时候,我们的要求很简单,仅仅只是想统计包含某个字符串的行总共有多少,这个时候,应该使用开关/c,写成 find/c"abc" test.txt。
如果要在每行的行首显示行号,怎么办?那就写成 find/n"abc" test.txt吧,它会把test.txt的内容都显示出来,与原文不一样的是,在每行内容的行首,都加上了行号——注意,它仅仅是在显示的时候加上行号而已,并没有真正改写文件的内容。
如果你看到这样的命令:find/i/v/n"Abc" test.txt,请一点要先沉住气,不要被众多的开关弄得眼花缭乱吓趴下了,仔细对照上面的解释,相信你很快就会理解它的功能:在test.txt文件中,查找不包含字符串Abc的所有行,并在行首标上这些行的行号,查找的时候,字符串Abc不区分大小写。
要是使用这样的语句:find/c/n"abc" test.txt,会出现什么样的结果呢?答案是:开关/n会被忽略掉,最终结果不会显示带行号的行内容,只会显示匹配的总行数而已。
echo abcdef|find"abc",见过这种写法吗?它的含义是:在字符串abcdef中,检测是否存在字符串abc,也就是说,find支持管道符号,把管道符号之前的语句的执行结果,作为指定字符串的查找对象,甚至,你可以使用这样的语句:find"abc" test.txt|find"xyz",它表示在test.txt中查找同时存在字符串abc和字符串xyz的行,只要你愿意,你可以继续用管道符号把这个find语句连接下去,我们把这个过程称为多重过滤。
在前面,我们说过,在 find"要查找的字符串"要查找的文件这条命令语句中,引号是必须的,要是我们要查找的内容就是双引号本身,那又该怎么办?
答案很简单:把双引号本身先用双引号转义,再放到双引号对中,写成 find"""" test.txt的格式,如果要查找两个连续的双引号,则应该写成 find"""""" test.txt。
如果你想查找两行之间的字符块,我劝你趁早放弃这个疯狂的想法,因为,find仅仅针对位于同一行上的字符串,不能查找跨行的字符块。
与findstr命令相比,find的功能确实有限得多,仅仅因为不支持正则表达式这一点,就有不少人把它视为鸡肋,从而遭到无情的抛弃。
然而,find并非一无是处,凭借自己的独门绝技,在与findstr的竞争中,它挣得了一席之地。
这些独门绝技是什么呢?(感谢BatCoder的提醒和zqz0012005的补充)
1、统计含指定字符串的总行数。find/c"abc" test.txt可以统计test.txt中含有字符串abc的总行数,而findstr则没有直接提供该功能,需要配合for语句才能实现;
2、find可以读取Unicode格式的文本,而findstr则不行;
3、find可以过滤某些特殊字符,而findstr则不行,比如,我们在使用fsutil fsinfo drives语句查询磁盘分区的时候,如果想让盘符分行显示而不是显示在同一行上的时候(这在用for语句提取盘符的时候很有用),find可以大显身手,而findstr只能干瞪眼了,具体语句为: fsutil fsinfo drives|find/v""
三、正则表达式入门经典的目录
1.4为什么正则表达式看起来令人生畏
8.1为什么需要向前查找和向后查找
第9章正则表达式的灵敏度和特殊性
9.3元字符如何影响灵敏度和特殊性
9.5重新分析StarTrainingCompany的例子
第11章在MicrosoftWord中使用正则表达式
第12章在StarOffice/OpenOffice.orgWriter中使用正则表达式..
第13章通过findstr使用正则表达式
第15章MicrosoftExcel中的通配符
第16章SQLServer2000中的正则表达式功能
第18章正则表达式与MicrosoftAccess
18.1MicrosoftAccess中元字符的用法
18.4使用#字符匹配日期/时间数据
第19章JScdpt和JavaScript中的正则表达式
19.1在JavaScript和JScript中使用正则表达式
19.2JavaScript和JScnPt中的元字符
20.2使用Match对象和Matches集合
第21章VisualBasic. NET与正则表达式
21.1System.Text.RegularExpressions命名空间
21.2VisualBasic. NET支持的元字符
22.1System.Text.RegularExpressions命名空间中的类
第24章W3CXMLSchema中的正则表达式
25.2java.util.regex包中支持的元字符
26.2使用Perl正则表达式的基本条件
26.5在Perl中使用正则表达式匹配模式
26.6一个简单的PerlRegex测试程序