[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理命令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返回的内容进行判断。
echo hello

call 调用可以实现  内层循环跳到外层循环

参考:http://bbs.bathome.net/viewthrea ... &authorid=44588

TOP

  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
复制代码

TOP

回复 3# find


    /x /v 一起用什么意思

TOP

回复 4# ivor


完全不匹配

TOP

回复 3# find


    这个貌似没有效果,两条命令把各自的文件内容都输出了
echo hello

TOP

回复 6# shuzai


能否把你的两个文件传上来看看?

TOP

回复 7# find

name1.txt
111
222
333
444

name2.txt
222a
555
444

生成a.txt b.txt就是两个的“copy”
echo hello

TOP

回复 8# shuzai


这两个文件是不是ANSI编码?

TOP

回复 9# find


    是的,跟这有关?我试了改成unicode和utf8格式也是一样
echo hello

TOP

回复 10# shuzai


能否把那两个文件压缩一下传来上,让我试试。

TOP

回复 11# find

就那几个 111 222 的
echo hello

TOP

回复 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编码,很多命令是无法直接处理的。

TOP

回复 13# find


这代码可用了~~不过发现只有ansi格式能用
unicode的时候结果是两个的“copy”
utf8格式的时候看结果对的,但乱码了
echo hello

TOP

返回列表