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

[文本处理] 批处理命令FINDSTR为何无法正确匹配中文关键词/字符串?

本帖最后由 pcl_test 于 2017-4-6 08:30 编辑

楼主写一个统计病区用药的批时,发现:
1.findstr "片 粒" 无法实现匹配含"片"或"粒"的行,加/r开关后可实现,但仍不解其理。
2.使用findstr /r /c:"         [^        ]*粒"时,前处空处为制表符,发现"粒"会匹配"辛(",此处括号为中文括号。去掉/r时"粒"不会匹配"辛("但其中正则式不能用。怀疑是编码问题,于是用notepad++试了下,以UTF-8格式编码时,发现"辛"的右边与"("的左边的编码,同"粒"的编码。问如何解决。
对/r的作用似懂非懂,希望高手不吝赐教,楼主感激不尽!
PS:用findstr匹配中文真是相当的蛋疼

本帖最后由 CrLf 于 2012-4-13 22:27 编辑

第一个问题,匹配多组宽字符时,findstr 本身有 bug,只能用 /r 或 /l 来强制修正或使用/c开关:
  1. findstr /c:"片" /c:"粒"
复制代码
第二个问题的原因是 findstr 匹配的是字节而非字符,试运行:
  1. echo 粒辛(>test.txt
  2. echo d^&echo q | debug test.txt
复制代码
你看到了什么?
粒的内码为 C1A3,而辛和为(的内码分别为 D0C1 与 A3A8,所以...

TOP

findstr "片 粒" 无法实现匹配含"片"或"粒"的行

可以这样:
  1. findstr "片.* 粒" a.txt
复制代码

TOP

大侠们真及时啊,先顶后看

TOP

谢谢版主,但第2个问题咋解决呢

TOP

返回列表