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

[文本处理] 【已解决】批处理命令findstr一些奇葩用法或者缺陷

本帖最后由 尘丶 于 2015-8-10 10:58 编辑

学习了这么久,findstr还是不够熟悉,因为有些命令都不太常用,所以有许多问题也不太清楚,论坛里的findstr问题都比较零碎,找起来比较麻烦,希望大家把知道的findstr一些小BUG或者容易忽略的问题发出来,让大家都学习下, 其实算是我的小请求。
这是我学findstr看到的一些小问题
1.
  1. echo;z|findstr "[A-Z]"
复制代码
结果:z
  1. echo;Z|findstr "[a-z]"
复制代码
结果:空
2.findstr设计缺陷
  1. wefwfw [test] findstr "\[test\]$"
复制代码
会查不到
  1. wefwfw [test] findstr "\[test\]$"
复制代码
加个回车换行符才会查到
3.
  1. echo;1 2|findstr /x "1 2"
复制代码
貌似有空格,findstr /x就会查不到
具体就这么多了,如有错希望大家纠正,也希望大家都发发自己知道的。

第一个问题请参考:
http://bbs.bathome.net/thread-6851-1-1.html
http://bbs.bathome.net/thread-12314-1-1.html

第二个问题请参考:
http://bbs.bathome.net/thread-7629-1-1.html

第三个问题请尝试:
echo;1 2|findstr /x /c:"1 2"
1

评分人数

TOP

回复 2# DAIC


    findstr跟ASCII 字符有啥关系

TOP

回复 3# 尘丶


    关系就是:[A-Z]不是你想象的大写字母A到Z

TOP

回复 4# DAIC


百度到的 Findstr 可以在任何 ASCII 文件或文件中精确查找所要查找的文本。
查找跟那个大小有啥关系,大神能说说吗

TOP

回复 5# 尘丶

其实[A-Z]表示的是AbBcC...zZ(并不表示所有大写字母,而是表示缺少小写字母a的其余字母),所以你用
  1. echo a|findstr [A-Z]
复制代码
找不到结果,但是你把a换成其他字母就会有输出。
同理,[a-z]表示的是aAbBcC...z(比不表示所有小写字母,而是表示缺少大写字母Z的其余字母),所以你用
  1. echo Z|findstr [A-Z]
复制代码
找不到结果,但是你把Z换成其他字母就会有输出。
因此,[a-Z]才表示所有字母。
1

评分人数

TOP

回复 5# 尘丶


    百度上那些大彩笔、大水笔们的话你也信?

TOP

- -回复 7# DAIC

TOP

回复 6# dizimotong


    原来是这样,感谢。

TOP

个人认为,flndstr作为系统自带的命令,对于简单的文本比较、字符串查找过滤还是非常方便的。
要找到臭虫,也要建立在熟练掌握其基本用法的基础之上才行
不完全了解其用法就去谈缺陷,不是好办法,更会让findstr初学者敬而远之
其实findstr对于正则的入门学习也很不错
正因为是阉割版正则,所以简单,适合入门。反正我当时学正则就是从findstr开始的

TOP

回复 10# WHY


    你指熟练掌握其基本用法的基础之上,怎样算是熟练?我认为了解用法和缺陷这两个并不矛盾。

TOP

回复 11# 尘丶


    以顶楼第3个"BUG" 为例,多加个开关 /c: 就能轻松解决的问题也属于BUG?
这不是什么BUG,或许 findstr 它就是这样设计的,称它为“奇葩的用法”更合适
类似地:
  1. (echo 你好&echo 我好)|findstr "你 我"
复制代码
没有回显
但多加一个开关 /i 就有回显,你认为这也是BUG吗?

怎样才算熟练?如果你坚持认为这就是BUG,如果你不懂得多加一个开关 /c:来解决问题,那就不算熟练。

顺带提一下,findstr 的 "$" 匹配回车(Cr 0x0D \r)
1

评分人数

TOP

回复 12# WHY


    受教了,为啥是加/i? 可能我BUG这词描述不太恰当,对新手来说这些小问题就是一些小BUG了,对你们大神来说可能只是一些小问题。

TOP

回复 13# 尘丶


/c: 的用法在帮助文档里面写的很清楚,可能是你以前没有注意过。

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

评分人数

TOP

回复 14# DAIC


    搞明白了了

TOP

返回列表