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

[文本处理] [已解决]BAT脚本如何显示文本中重复出现的内容?

[复制链接]
发表于 2012-10-17 10:47:59 | 显示全部楼层 |阅读模式
本帖最后由 lxningbat 于 2012-10-18 20:57 编辑

如   1.txt  中有:
01 02 03
02 03 04
03 04 05

即显示  02 03 04


怎么去查找对比?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-10-17 10:56:34 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2012-10-17 10:58 编辑

用FOR读取内容,转成函数,进行累计,最后显示大于1的函数名

不过你的是固定三列吗?如果不是就要用双FOR
 楼主| 发表于 2012-10-17 11:16:58 | 显示全部楼层
回复 2# mxxcgzxxx


    感谢你的思路!这里面不只三行,可能会有十几行或更多,由于学学艺不精只懂很基础的for,转成函数啥的不懂,还请指点!
发表于 2012-10-17 11:43:11 | 显示全部楼层
  1. Set oDic = CreateObject("Scripting.Dictionary")
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set fin = fso.OpenTextFile("1.txt",1)
  4. While Not fin.AtEndOfStream
  5.     data = Split(Trim(fin.ReadLine)," ")
  6.     For i=0 To UBound(data)
  7.         If oDic.Exists(data(i)) Then
  8.             oDic(data(i)) = oDic(data(i))+1
  9.         Else
  10.             oDic.Add data(i),1
  11.         End If
  12.     Next
  13. Wend
  14. fin.Close

  15. Set fout = fso.OpenTextFile("2.txt",2,1)
  16. For Each x In oDic
  17.     If oDic(x)>1 Then fout.Write x & " "
  18. Next
  19. fout.Close

  20. MsgBox "完成!"
复制代码
VBS代码,不会bat没办法、
发表于 2012-10-17 13:34:47 | 显示全部楼层
本以为仅是在群里问呢,还是在发一下吧
[CODE]
@echo off
for /f "delims=" %%i in (1.txt) do (
        for %%j in (%%i) do (
                if not defined %%j (set %%j=#) else (if not defined a%%j (echo %%j&&set a%%j=1))
        )
)
pause
[/CDOE]
PS:4L的方法,应该没什么问题,一开始也想用数组了,
 楼主| 发表于 2012-10-17 14:30:55 | 显示全部楼层
本帖最后由 lxningbat 于 2012-10-17 14:43 编辑

回复 5# wc726842270


    非常感谢二位! 4L的可能,5L大侠的能否只显示在一行?
现在又有一个新的问题,如刚才的:
01 02 03
02 03 04
03 04 05
在这里面03出现了3次,02 04各出现了2次,那么,只显示出现最高次数的那些呢?
发表于 2012-10-17 16:37:20 | 显示全部楼层
回复 6# lxningbat
Set oDic = CreateObject("Scripting.Dictionary")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fin = fso.OpenTextFile("1.txt",1)
max =
0
'最高出现次数
While Not fin.AtEndOfStream
    data = Split(Trim(fin.ReadLine),
" ")
   
For i=0 To UBound(data)
        
If oDic.Exists(data(i)) Then
            
oDic(data(i)) = oDic(data(i))+1
            
If max<oDic(data(i)) Then max = oDic(data(i))
        
Else
            
oDic.Add data(i),1
        
End If
    Next
Wend
fin.Close

Set fout = fso.OpenTextFile("2.txt",2,1)
For Each x In oDic
   
If oDic(x)=max Then fout.Write x & " "
Next
fout.Close

MsgBox
"完成!"


水平不够,只会VBS,不过效果不错,而且可以按要求任意扩展、

评分

参与人数 1技术 +1 收起 理由
lxningbat + 1 非常感谢!同时还有batman!!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 16:40 , Processed in 0.017901 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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