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

[文本处理] [已解决]批处理如何进行几个文本对比?

本帖最后由 天天笑 于 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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

标题过于模糊,请修改一下标题

TOP

大神们,帮忙一下吧

TOP

这样?
效率不是很理想
  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
复制代码

TOP

要对比b.txt & c.txt包含英文和数字两部分,貌似只是对比了英文部分,就算后面的数字不一样也不会输出Fail.
帮忙看看~

TOP

回复 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
复制代码
1

评分人数

TOP

可以了,谢谢Terse!

TOP

返回列表