Board logo

标题: [文件操作] 批处理命令findstr如何进行文件比对? [打印本页]

作者: shuzai    时间: 2012-1-14 12:35     标题: 批处理命令findstr如何进行文件比对?

两个文件 name1.txt name2.txt ,文件里面每行有一个姓名,要将1的名字跟2的名字进行比对,如果1中的名字在2中没有,打印出来,我用两重循环实现了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in (name1.txt) do (
  3.     set /a a = 0
  4.     for /f %%j in (name2.txt) do (
  5.         if %%i == %%j (  set /a a = 1 )
  6.     )
  7.     if !a! == 0 ( echo %%i )
  8. )
  9. 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

  1. @echo off
  2. findstr /v /x /g:name1.txt name2.txt >a.txt
  3. 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
  1. @echo off
  2. type name2.txt | findstr /l /v /x /g:name1.txt
  3. 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