Board logo

标题: [文本处理] [已解决]批处理如何进行几个文本对比? [打印本页]

作者: 天天笑    时间: 2013-11-13 11:26     标题: [已解决]批处理如何进行几个文本对比?

本帖最后由 天天笑 于 2013-11-20 13:22 编辑

a.txt
7digital (Win8 Metro UI)        v2.0.2.0
Netflix        v1.3.0.32
dff (Win8)                        v2.1.12.77
dfdfewws (Win8 Metro UI)        v4.0.2.0
MagV         1.1.12.77

b.txt
7digital         2.0.2.0
dfshkja         3.0.2.0
dfdfewws      4.0.2.0

c.txt
dff            2.1.12.77
dfs            3.1.12.77
Netflix        1.3.0.32

要求:1.a.txt中含有(Win8 Metro UI)的行和b.txt对比,如果b.txt中的内容(包含英文和数字两部分)在a.txt中能找到的话,输出a.txt对应的行的内容到d.txt,如果a.txt里面的行没有含b.txt中的内容的行,测在对应的行输出a.txt对应的行的内容"Fail”到d.txt
      2.a.txt中不含(Win8 Metro UI)的行和c.txt对比, 如果c.txt中的内容(包含英文和数字两部分)在a.txt中能找到的话,输出a.txt对应的行的内容到d.txt,如果a.txt里面的行没有含c.txt中的内容的行,测在对应的行输出a.txt对应的行的内容"Fail”到d.txt
输出结果d.txt
7digital (Win8 Metro UI)        v2.0.2.0
Netflix        v1.3.0.32
dff (Win8)                        v2.1.12.77
dfdfewws (Win8 Metro UI)        v4.0.2.0
MagV         1.1.12.77     Fail
作者: foxJL    时间: 2013-11-13 13:44

标题过于模糊,请修改一下标题
作者: 天天笑    时间: 2013-11-18 11:10

大神们,帮忙一下吧
作者: terse    时间: 2013-11-18 13:27

这样?
效率不是很理想
  1. @echo off
  2. set "s=(Win8 Metro UI)"
  3. for /f "delims=" %%i in (a.txt) do (
  4.     setlocal enabledelayedexpansion
  5.     set "str=%%i"
  6.     if "!str:%s%=!" == "!str!" (
  7.        for /f "delims=" %%j in (c.txt) do (
  8.            for  %%k in (%%j) do if "!str:%%k=!" neq "!str!" set f=1
  9.        )
  10.     ) else (
  11.            for /f "delims=" %%j in (b.txt) do (
  12.                for  %%k in (%%j) do if "!str:%%k=!" neq "!str!" set F=1
  13.           )
  14.       )
  15.       if defined f (echo !str!) else (echo !str! Fail)
  16.       endlocal
  17. )
  18. pause
复制代码

作者: 天天笑    时间: 2013-11-18 20:22

要对比b.txt & c.txt包含英文和数字两部分,貌似只是对比了英文部分,就算后面的数字不一样也不会输出Fail.
帮忙看看~
作者: terse    时间: 2013-11-18 23:59

回复 5# 天天笑
总是不那么完善的
因为 1.1.1.1 对于1111.1.1.111 还是匹配的
  1. @echo off
  2. set "s=(Win8 Metro UI)"
  3. for /f "delims=" %%i in (a.txt) do (
  4.     setlocal enabledelayedexpansion
  5.     set "str=%%i"
  6.     if "!str:%s%=!" == "!str!" (
  7.        for /f "delims=" %%j in (c.txt) do (
  8.            if not defined flag (
  9.               set  f=a
  10.               for %%k in (%%j) do if "!str:%%k=!" == "!str!" set  f=
  11.               if defined f set flag=a   
  12.            )
  13.        )
  14.     ) else for /f "delims=" %%j in (b.txt) do (
  15.                if not defined flag (
  16.                   set  f=a
  17.                   for %%k in (%%j) do if "!str:%%k=!" == "!str!" set  f=
  18.                   if defined f set flag=a
  19.                )
  20.            )
  21.     if defined flag (echo !str!) else echo !str! Fail
  22.     endlocal
  23. )
  24. pause
复制代码

作者: 天天笑    时间: 2013-11-20 13:21

可以了,谢谢Terse!




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