找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28527|回复: 6

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

[复制链接]
发表于 2013-11-13 11:26:31 | 显示全部楼层 |阅读模式
本帖最后由 天天笑 于 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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-11-13 13:44:55 | 显示全部楼层
标题过于模糊,请修改一下标题
 楼主| 发表于 2013-11-18 11:10:45 | 显示全部楼层
大神们,帮忙一下吧
发表于 2013-11-18 13:27:42 | 显示全部楼层
这样?
效率不是很理想
  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:34 | 显示全部楼层
要对比b.txt & c.txt包含英文和数字两部分,貌似只是对比了英文部分,就算后面的数字不一样也不会输出Fail.
帮忙看看~
发表于 2013-11-18 23:59:27 | 显示全部楼层
回复 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-11-20 13:21:34 | 显示全部楼层
可以了,谢谢Terse!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 18:29 , Processed in 0.015829 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表