找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 87651|回复: 19

[文本处理] 批处理如何对比两个文本?

[复制链接]
发表于 2015-1-4 20:50:37 | 显示全部楼层 |阅读模式
测试1是原文,
测试1跟测试2里面的内容对比
对比后的结果导出保存到测试结果

测试2个内容排列顺序依据测试1为准
测试1和测试2对比后按照顺序保存到“测试结果”里面

比如测试2里面的第一行的内容 在测试1里面是第三行
经过批处理处理后 导出的结果是前2行是空行 第3行是内容

相关文本我已经上传到附件中 麻烦高手帮忙写个批处理 谢谢


我是win7   64位操作系统
 楼主| 发表于 2015-1-4 21:54:06 | 显示全部楼层
麻烦高手帮忙写一下  谢谢
发表于 2015-1-4 22:15:01 | 显示全部楼层
囧,这么绕的事情为什么不用 Excel ?
发表于 2015-1-5 02:17:34 | 显示全部楼层
本帖最后由 tmplinshi 于 2015-1-5 02:41 编辑
  1. @echo off
  2. (for /f "tokens=1,2" %%a in (测试1.txt) do (
  3.         findstr "^%%a$" 测试2.txt >nul && (
  4.                 echo %%a %%b
  5.         ) || (  echo;  )
  6. )) >测试结果.txt
复制代码

评分

参与人数 2技术 +2 收起 理由
pengyou86 + 1 成功
慕夜蓝化 + 1 昨天,看到问题之后直接就懵了...心里想着要 ...

查看全部评分

发表于 2015-1-5 02:20:32 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (测试2.txt) do set $%%i=a
  3. for /f "tokens=1*" %%i in (测试1.txt) do (
  4.     if defined $%%i (echo %%i %%j) else echo,
  5. )
  6. pause
复制代码

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=1
  3. for /f "tokens=1*delims=:" %%a in ('findstr /ibng:测试2.txt 测试1.txt') do (
  4.     for /l %%i in (!n!,1,%%a) do (
  5.         if %%a equ %%i (echo %%b)else echo,
  6.         set /a n=%%a+1
  7.     )
  8. )
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
tmplinshi + 1 第二个好

查看全部评分

发表于 2015-1-5 08:53:51 | 显示全部楼层
回复 4# tmplinshi

昨天看到问题之后,直接就懵了。。。想着要用到findstr 就是不知道该怎么去写,最后连用了几个for 也没解决问题,就卡在那走不动,&&,和||也总是弄混>_<、
 楼主| 发表于 2015-1-5 08:59:40 | 显示全部楼层
tmplinshi 发表于 2015-1-5 02:17

谢谢测试成功就是运行起来速度有点慢
 楼主| 发表于 2015-1-5 09:01:09 | 显示全部楼层
terse 发表于 2015-1-5 02:20



谢谢你,麻烦你再修改一下 把对比后的结果保存到“测试结果.txt”中
本人小菜  请谅解
 楼主| 发表于 2015-1-5 09:08:46 | 显示全部楼层
terse 发表于 2015-1-5 02:20


测试不能使用  谢谢
 楼主| 发表于 2015-1-5 09:13:04 | 显示全部楼层
tmplinshi 发表于 2015-1-5 02:17



    测试1文本内容很大有20多万行内容  批处理运行起来速度太慢。还有别的方法可以快速对比吗?
发表于 2015-1-5 09:45:57 | 显示全部楼层
回复 9# pengyou86


    你需要举例说明什么叫做“不能使用”,否则人家没有办法继续帮助你。
 楼主| 发表于 2015-1-5 09:53:25 | 显示全部楼层
回复 11# DAIC


    都快一个小时了  批处理还没有对比完毕
发表于 2015-1-5 10:18:44 | 显示全部楼层
回复 12# pengyou86


    所以嘛,你应该先找两个小文件验证一下功能是否正常。如果是效率不够高,人家可以优化。你留下一句“不能使用”人家怎么知道你遇到了啥问题。
发表于 2015-1-5 12:19:54 | 显示全部楼层
本帖最后由 terse 于 2015-1-5 14:14 编辑
测试不能使用  谢谢
pengyou86 发表于 2015-1-5 09:08

两个都不能使用吗
大文件个话 下面这段能否处理呢
  1. @if(0)==(0) echo off
  2. cscript -nologo -e:javascript %0<测试1.txt >测试结果.txt "测试2.txt"
  3. pause&goto :eof
  4. @end
  5. Array.prototype.arr_ay = function(obj) {
  6.    var i = this.length;
  7.    while (i--) {
  8.       if (this[i] === obj) {
  9.         return true;
  10.       }
  11.    }
  12.    return false;
  13. }  
  14. var arr=new ActiveXObject('Scripting.FileSystemObject').OpenTextFile(WScript.Arguments.Item(0)).readall().split('\r\n');
  15. var re = /(\w+).*/ig;
  16. while (!WScript.StdIn.AtEndOfStream){
  17.     var str = WScript.StdIn.Readline();
  18.     arr.arr_ay(str.replace(re,'$1')) ? WSH.echo(str) : WSH.echo('')
  19. }
复制代码
增加个临时文件 看能否提高点效率
  1. @echo off&setlocal enabledelayedexpansion
  2. findstr /ibng:测试2.txt 测试1.txt>$
  3. set n=2
  4. (for /f "tokens=1*delims=:" %%a in ($) do (
  5.     for /l %%i in (!n!,1,%%a) do echo,
  6.     echo %%b
  7.     set /a n=%%a+2
  8. ))> 测试结果.txt
  9. del $
  10. pause
复制代码
再给个 三方的
  1. @gawk "ARGIND==1{a[$0]=1}ARGIND>1{if (a[$1]){print $0}else{print a[$1]}}" 测试2.txt 测试1.txt >测试结果.txt
复制代码
发表于 2015-1-5 14:55:05 | 显示全部楼层
如果只是用来检查文本有哪些不同,而不一定要输出 txt 的话,也可以使用 BeyondCompare,比较直观,用很久了,用来对比 code 妥妥的,妈妈再也不用担心我不知道改了什么地方了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:29 , Processed in 0.020157 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表