标题: [文本处理] 批处理如何比较文本中的差异行? [打印本页]
作者: 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 ........
使用时根据实际情况,替换掉上述文件名就可以了。- @echo off
- setlocal enabledelayedexpansion
- for %%i in (d1.txt d2.txt d3.txt) do (
- set "txt=%%i"
- for /f "delims=," %%i in (!txt!) do (
- set "no=0"
- set "a=%%i"
- for /f "delims=," %%i in (d.txt) do (
- if "!a!"=="%%i" set /a no+=1
- )
- if "!no!"=="0" echo !a! 输出到 多余.txt
- ))
- pause
复制代码
作者: 545810831 时间: 2011-12-2 20:48
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 62) do (
- set "m=00%%i"
- set m=!m:~-3!
- findstr /vg:d.txt fy!m!.txt>>d多余.txt
- findstr /vg:聊天冲浪.txt FY!m!a.txt>>聊天冲浪多余.txt
- findstr /vg:棋牌对战.txt FY!m!b.txt>>棋牌对战多余.txt
- findstr /vg:e.txt FY!m!e.txt>>e多余.txt
- )
- pause
复制代码
作者: czjt1234 时间: 2011-12-2 22:56
不行,执行报错
作者: awk 时间: 2011-12-2 23:31
回复 4# czjt1234
报错信息是什么?
作者: powerbat 时间: 2011-12-2 23:41
未考虑特殊字符- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:d.txt fy???.txt') do set d_%%b=1
- (for /f "tokens=2 delims=_=" %%a in ('set d_') do echo %%a)>d多余.txt
- for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:聊天冲浪.txt fy???a.txt') do set 聊天冲浪_%%b=1
- (for /f "tokens=2 delims=_=" %%a in ('set 聊天冲浪_') do echo %%a)>聊天冲浪多余.txt
- for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:棋牌对战.txt fy???b.txt') do set 棋牌对战_%%b=1
- (for /f "tokens=2 delims=_=" %%a in ('set 棋牌对战_') do echo %%a)>棋牌对战多余.txt
- for /f "tokens=1* delims=:" %%a in ('findstr /lxv /g:e.txt fy???e.txt') do set e_%%b=1
- (for /f "tokens=2 delims=_=" %%a in ('set e_') do echo %%a)>e多余.txt
- 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 |