Board logo

标题: [文本处理] [已解决]求助bat查找文本匹配并输出 [打印本页]

作者: fcxk    时间: 2015-5-10 19:20     标题: [已解决]求助bat查找文本匹配并输出

本帖最后由 fcxk 于 2015-5-10 22:31 编辑

例如:

a.txt

000x000568  内容XXXXXXXXXXXXX
0125x00002  内容BBBBBBBBBBBBB
XXXXXXXXXX  内容DDDDDDDDDDDD
N条数据

输入 0125x00002 时或其中一条相对应的。显示相对应的内容
作者: yangfengoo    时间: 2015-5-10 20:04

  1. @echo off
  2. :#
  3. set /p var=请输入要找的内容:
  4. for /f "tokens=1*" %%a in ('findstr "%var%" a.txt') do echo %%b
  5. goto #
  6. pause
复制代码

作者: fcxk    时间: 2015-5-10 20:11

本帖最后由 fcxk 于 2015-5-10 20:13 编辑

要限制查询的内容对应、比如 XXXXXXXXXX  内容DDDDDDDDDDDD

必须要输入XXXXXXXXXX时,得出相就结果、没有满足对应条件时判断输入错误

现在楼上的只要输入一个0就得出全部带0的结果

我要的是比如文本内容是9个0、必须要达到9个0,才能显示相对应结果内容、否则查询错误
作者: yangfengoo    时间: 2015-5-10 20:47

  1. @echo off
  2. :#
  3. set /p var=请输入要找的内容:
  4. for /f "tokens=1*" %%a in ('findstr "%var%" a.txt') do if "%%a"=="%var%" echo %%b
  5. goto #
  6. pause
复制代码

作者: fcxk    时间: 2015-5-10 20:55

本帖最后由 fcxk 于 2015-5-10 20:56 编辑

回复 4# yangfengoo


    谢谢、输入的是可以查询到了、但其他相应的就不会显示、能不能帮我加上输入的后5位相匹配的也显示出来

   就是在完全匹配的情况下,完全匹配的在最前、后面跟着显示后5位相匹配的结果
作者: yangfengoo    时间: 2015-5-10 21:02

不明白,举例说明下 你要的结果
作者: fcxk    时间: 2015-5-10 21:12

本帖最后由 fcxk 于 2015-5-11 09:29 编辑

回复 6# yangfengoo

例子:
a.txt

内容:
01x00150022 内容XXXXXXXXXXX
01x01550022 内容XXXXXXXxxx
01x00100666 内容XXXXXXXXXXX
01x00800756 内容XXXXXXXXXXX
01x000660ab 内容XXXXXXXXXXX
01x01000756 内容XXXXXXXXXXX
后面还有N条数据

想要的结果:
输入:01x00150022
显示:
01x00150022
内容XXXXXXXXXXX
01x01550022
内容XXXXXXXxxx
首个显示完整匹配、后面显示后5位匹配、

输入:01x00或空值
显示:
输入查询错误。
作者: yangfengoo    时间: 2015-5-10 22:07

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :#
  4. set /p var=请输入要找的内容:
  5. for /f "tokens=1*" %%a in ('findstr "!var!" a.txt') do (
  6. if "%%a"=="!var!" (
  7.    echo,%%a& echo,%%b
  8.    for /f "tokens=1*" %%i in ('findstr "!var:~-5!" a.txt') do (
  9.      if not "%%i"=="!var!" echo,%%i&echo,%%j
  10.    )
  11.   )
  12.   set var=#
  13. )
  14. if not "!var!"=="#" echo,输入查询错误
  15. goto #
复制代码

作者: fcxk    时间: 2015-5-10 22:23

回复 8# yangfengoo


    怎么上传本地图片啊,我给你看结果

   现在这代码匹配的怎么是前5位啊。
作者: terse    时间: 2015-5-11 01:04

这样呢?
  1. @echo off
  2. set str=01x00150022
  3. for /f "tokens=1,2" %%i in ('findstr /i "\<%str%\>" a.txt') do (
  4.     echo;%%i
  5.     echo;%%j
  6. )
  7. for /f "tokens=1,2" %%i in ('findstr /iv "\<%str%\>" a.txt^|findstr /i "%str:~-5%\>"') do (
  8.     echo;%%i
  9.     echo;%%j
  10. )
  11. pause
复制代码

作者: fcxk    时间: 2015-5-11 09:24

本帖最后由 fcxk 于 2015-5-11 09:35 编辑

回复 10# terse


    你这个更不行,直接按继续退出
    你直接定一个值了啊,N条数据查询,不是单个数据查询



例子:
a.txt

内容:
01x00150022 内容XXXXXXXXXXX
01x01550022 内容XXXXXXXxxx
01x00100666 内容XXXXXXXXXXX
01x00800756 内容XXXXXXXXXXX
01x000660ab 内容XXXXXXXXXXX
01x01000756 内容XXXXXXXXXXX
后面还有N条数据

想要的结果:
输入:01x00150022时,查询相匹配的数据、首个显示完整匹配、后面显示后5位匹配、

显示:
01x00150022
内容XXXXXXXXXXX
01x01550022
内容XXXXXXXxxx

输入:01x00或空值
显示:
输入查询错误。



8楼的大哥的代码我昨晚试了下、查询的结果是反而显示前面5位匹配了,查询出2000多条前面匹配的数据,我要 的是后面5位相同的
还有就是用findstr时,当输入带空值时会显示findstr没有找到搜索字符串、当输入后面带有空格时、就如同死了程序一样、不会查询。并不是直接显示、自己定义的查询错误
作者: terse    时间: 2015-5-11 11:40

回复 11# fcxk
我上面代码只是测试一个小样本 你也没给出文件测试
要自定义搜索字符 把 set str=01x00150022 改为  set /p str=
如果一次输入多个条件 要改代码




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