Board logo

标题: [文本处理] 批处理如何比较文本中的差异行? [打印本页]

作者: czjt1234    时间: 2011-12-2 08:36     标题: 批处理如何比较文本中的差异行?

本帖最后由 czjt1234 于 2011-12-5 09:46 编辑

d.txt           聊天冲浪.txt    棋牌对战.txt     e.txt
fy001.txt     FY001a.txt     FY001b.txt     FY001e.txt
fy002.txt     FY002a.txt     FY002b.txt     FY002e.txt
......
fy062.txt     FY062a.txt     FY062b.txt     FY062e.txt

文件夹里有这么多文件,没有其它文件
所有文件里全是游戏名,每行一个游戏名

现在要第一列的 fy001.txt~fy062.txt 同 d.txt 里比较,如果存在 d.txt 里没有的游戏名,则输出到 d多余.txt
第二列的 fy001a.txt~fy062a.txt 同 聊天冲浪.txt 里比较,如果存在 聊天冲浪.txt 里没有的,则输出到 聊天冲浪多余.txt
第三列 fy001b.txt~fy062b.txt 同 棋牌对战.txt 里比较,如果存在 棋牌对战.txt 里没有的,则输出到 棋牌对战多余.txt
第四列 fy001e.txt~fy062e.txt 同 e.txt 里比较,如果存在 e.txt 里没有的,则输出到 e多余.txt

1 要求整行匹配,因为可能有 完美世界 和 完美世界国际版 这样包含另外一个游戏名的情况
2 游戏名可能含有空格
3 比如 fy001.txt 和 fy002.txt 里都有多余的游戏名 完美世界,则不需要重复输出,只要输出1个就行了

7楼的附件里,中文名称的不能识别
作者: BAT1    时间: 2011-12-2 14:39

d.txt
d1.txt d2.txt d3.txt ........
使用时根据实际情况,替换掉上述文件名就可以了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (d1.txt d2.txt d3.txt) do (
  4.      set "txt=%%i"
  5.      for /f "delims=,"  %%i in (!txt!) do (
  6.         set "no=0"
  7.         set "a=%%i"
  8.         for /f "delims=,"  %%i in (d.txt) do (
  9.                if "!a!"=="%%i" set /a no+=1
  10.                )
  11.         if "!no!"=="0" echo !a! 输出到 多余.txt
  12. ))
  13. pause
复制代码

作者: 545810831    时间: 2011-12-2 20:48

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 62) do (
  3. set "m=00%%i"
  4. set m=!m:~-3!
  5. findstr /vg:d.txt  fy!m!.txt>>d多余.txt
  6. findstr /vg:聊天冲浪.txt  FY!m!a.txt>>聊天冲浪多余.txt
  7. findstr /vg:棋牌对战.txt  FY!m!b.txt>>棋牌对战多余.txt
  8. findstr /vg:e.txt FY!m!e.txt>>e多余.txt
  9. )
  10. pause
复制代码

作者: czjt1234    时间: 2011-12-2 22:56

不行,执行报错
作者: awk    时间: 2011-12-2 23:31

回复 4# czjt1234


报错信息是什么?
作者: powerbat    时间: 2011-12-2 23:41

未考虑特殊字符
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:d.txt fy???.txt') do set d_%%b=1
  3. (for /f "tokens=2 delims=_=" %%a in ('set d_') do echo %%a)>d多余.txt
  4. for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:聊天冲浪.txt fy???a.txt') do set 聊天冲浪_%%b=1
  5. (for /f "tokens=2 delims=_=" %%a in ('set 聊天冲浪_') do echo %%a)>聊天冲浪多余.txt
  6. for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:棋牌对战.txt fy???b.txt') do set 棋牌对战_%%b=1
  7. (for /f "tokens=2 delims=_=" %%a in ('set 棋牌对战_') do echo %%a)>棋牌对战多余.txt
  8. for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:e.txt fy???e.txt') do set e_%%b=1
  9. (for /f "tokens=2 delims=_=" %%a in ('set e_') do echo %%a)>e多余.txt
  10. pause
复制代码

作者: czjt1234    时间: 2011-12-3 08:12

回复 5# awk


是当前路径不对,报错,我改了

但是这2个文件,对比以后结果不对啊

加了/i,好点,但是还有几个不能正确识别,怎么回事?
作者: czjt1234    时间: 2011-12-3 08:14

回复 6# powerbat


    谢谢

我是普通文件名,没有特殊符号
作者: awk    时间: 2011-12-3 11:29

回复 7# czjt1234


哪几个不能正确识别?
作者: czjt1234    时间: 2011-12-5 09:46

7楼的附件里,中文名称的不能识别




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