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

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

[复制链接]
 楼主| 发表于 2015-1-5 21:47:09 | 显示全部楼层
@if(0)==(0) echo off
cscript -nologo -e:javascript %0<测试1.txt >测试结果.txt "测试2.txt"
pause&goto :eof
@end
Array.prototype.arr_ay = function(obj) {
   var i = this.length;
   while (i--) {
      if (this[i] === obj) {
        return true;
      }
   }
   return false;
}  
var arr=new ActiveXObject('Scripting.FileSystemObject').OpenTextFile(WScript.Arguments.Item(0)).readall().split('\r\n');
var re = /(\w+).*/ig;
while (!WScript.StdIn.AtEndOfStream){
    var str = WScript.StdIn.Readline();
    arr.arr_ay(str.replace(re,'$1')) ? WSH.echo(str) : WSH.echo('')
}


测试就这个好用  谢谢各位  感谢大家的帮忙
 楼主| 发表于 2015-1-5 21:47:32 | 显示全部楼层
两个都不能使用吗
大文件个话 下面这段能否处理呢增加个临时文件 看能否提高点效率再给个 三方的
terse 发表于 2015-1-5 12:19



    谢谢你
发表于 2015-1-6 22:26:21 | 显示全部楼层
多是高手啊!我多不知道咋回事?
发表于 2015-1-8 20:17:48 | 显示全部楼层
本帖最后由 shelluserwlb 于 2015-1-8 20:34 编辑

你这个数据很多的话完全可以放在excel中用VBA实现的
将“测试1”放到 sheet1 中分成两列(A列和B列),将"测试2"放到 sheet2 (A列)中,再运行下面的代码,结果就会出现在"sheet3"中了。
  1. Sub a()
  2.     Dim n1, n2 As Integer
  3.     Dim index1, index2 As String
  4.     Dim vlue1, vlue2 As String
  5.     n1 = WorksheetFunction.CountA(Worksheets("sheet1").Columns(1))
  6.     n2 = WorksheetFunction.CountA(Worksheets("sheet2").Columns(1))
  7.     index1 = 1
  8.     Do While index1 <= n1
  9.         vlue1 = Worksheets("sheet1").Cells(index1, 1)
  10.         index2 = 1
  11.         Do While index2 <= n2
  12.             vlue2 = Worksheets("sheet2").Cells(index2, 1)
  13.             If vlue1 = vlue2 Then
  14.                 Worksheets("Sheet1").Cells(index1, 1).Copy _
  15.                           Destination:=Worksheets("Sheet3").Cells(index1, 1)
  16.                 Worksheets("Sheet1").Cells(index1, 2).Copy _
  17.                           Destination:=Worksheets("Sheet3").Cells(index1, 2)
  18.                 Exit Do
  19.             End If
  20.             index2 = index2 + 1
  21.         Loop
  22.         index1 = index1 + 1
  23.     Loop
  24.     MsgBox "操作成功!"
  25. End Sub
复制代码
发表于 2015-1-13 23:56:10 | 显示全部楼层
本帖最后由 cjiabing 于 2015-1-14 00:05 编辑
  1. @echo off&setlocal EnableDelayedExpansion
  2. set line=18
  3. ::设置总行数


  4. echo;开始搜索 . . .
  5. cd.>搜索结果.txt
  6. >>搜索结果.txt findstr/ng:测试2.txt 测试1.txt
  7. >>搜索结果.txt echo %line%:


  8. echo;开始整理 . . .
  9. cd.>测试结果.txt  
  10. (
  11. for /f "tokens=1* delims=:"  %%a in (搜索结果.txt) do if not "%%a"=="" (
  12.     if not "!var!"=="" (set /a num=%%a-!var!-1) else set /a num=%%a-1
  13.     if not "!num!"=="" for /l %%i in (1,1,!num!) do echo;
  14.     echo;%%b
  15.     set var=%%a
  16. ) else (
  17.     set /a num=%line%-!var!-1
  18.     for /l %%i in (1,1,!num!) do echo;
  19. )
  20. )>>测试结果.txt  
  21. echo;
  22. echo;任务结束。
  23. echo;
  24. pause
  25. del 搜索结果.txt

复制代码

没试过几十万行的,估计要很久很久很久……
先搜索结果,再整理格式位置,效率可能高点——猜测而已,你可以做做试试!~
整理部分主要考虑了开头和结尾空格问题,如果不用考虑可以稍微简化条件判断if部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 14:33 , Processed in 0.017075 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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