标题: [文件操作] 批处理命令findstr如何进行文件比对? [打印本页]
作者: shuzai 时间: 2012-1-14 12:35 标题: 批处理命令findstr如何进行文件比对?
两个文件 name1.txt name2.txt ,文件里面每行有一个姓名,要将1的名字跟2的名字进行比对,如果1中的名字在2中没有,打印出来,我用两重循环实现了- @echo off&setlocal enabledelayedexpansion
- for /f %%i in (name1.txt) do (
- set /a a = 0
- for /f %%j in (name2.txt) do (
- if %%i == %%j ( set /a a = 1 )
- )
- if !a! == 0 ( echo %%i )
- )
- pause
复制代码
不过我想到了,如果name2有上万行或者更多的时候,而如果第一行或者前面几行就有匹配结果,那个里面的循环会作无用功的照样运行一遍。而for里面又不能用标签跳转吧,批处理又没有continue的命令。
然后我想到 findstr 命令,是否可以替换掉中间的循环进行操作呢。我不会如何操作findstr返回的内容进行判断。
作者: ivor 时间: 2012-1-14 14:30
call 调用可以实现 内层循环跳到外层循环
参考:http://bbs.bathome.net/viewthrea ... &authorid=44588
作者: find 时间: 2012-1-14 15:28
- @echo off
- findstr /v /x /g:name1.txt name2.txt >a.txt
- findstr /v /x /g:name2.txt name1.txt >b.txt
复制代码
作者: ivor 时间: 2012-1-14 16:45
回复 3# find
/x /v 一起用什么意思
作者: find 时间: 2012-1-14 16:46
回复 4# ivor
完全不匹配
作者: shuzai 时间: 2012-1-14 20:41
回复 3# find
这个貌似没有效果,两条命令把各自的文件内容都输出了
作者: find 时间: 2012-1-14 21:27
回复 6# shuzai
能否把你的两个文件传上来看看?
作者: shuzai 时间: 2012-1-14 23:47
回复 7# find
name1.txt
111
222
333
444
name2.txt
222a
555
444
生成a.txt b.txt就是两个的“copy”
作者: find 时间: 2012-1-15 08:41
回复 8# shuzai
这两个文件是不是ANSI编码?
作者: shuzai 时间: 2012-1-15 09:37
回复 9# find
是的,跟这有关?我试了改成unicode和utf8格式也是一样
作者: find 时间: 2012-1-15 14:25
回复 10# shuzai
能否把那两个文件压缩一下传来上,让我试试。
作者: shuzai 时间: 2012-1-15 14:46
回复 11# find
就那几个 111 222 的
作者: find 时间: 2012-1-15 19:41
回复 12# shuzai - @echo off
- type name2.txt | findstr /l /v /x /g:name1.txt
- type name1.txt | findstr /v /x /g:name2.txt
复制代码
name11.txt和name22.txt是unicode编码,很多命令是无法直接处理的。
作者: shuzai 时间: 2012-1-15 20:17
回复 13# find
这代码可用了~~不过发现只有ansi格式能用
unicode的时候结果是两个的“copy”
utf8格式的时候看结果对的,但乱码了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |