[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @set @n=0//&cscript.exe -e:jscript "%~f0"&exit /b
  2. file = "a.txt";
  3. strConnect = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.;'
  4.     + 'Extended Properties="text;HDR=no;FMT=Delimited;";';
  5. AdoCnn = new ActiveXObject("ADODB.Connection");
  6. AdoCnn.Open(strConnect);
  7. //AdoCnn.Execute("Select * into [result.csv] FROM ["+file+"] where [F1] in (select [F1] from ["+file+"] group by [F1] having count([F1])>1)");
  8. AdoRs = new ActiveXObject("ADODB.Recordset");
  9. AdoRs.Open("SELECT * FROM ["+file+"] where [F1] in (select [F1] from ["+file+"] group by [F1] having count([F1]) > 1)", AdoCnn, 3);
  10. n = AdoRs.RecordCount
  11. s = AdoRs.GetString(2, n, ",", "\r\n");
  12. AdoRs.Close();
  13. AdoCnn.Close();
  14. fso = new ActiveXObject("Scripting.FileSystemObject");
  15. fso.OpenTextFile('result.txt', 2, true).write(s);
  16. WScript.Echo("共有"+n+"条重复数据,结果保存在result.txt");
复制代码
3

评分人数

    • zqz0012005: 谁说没人用JS?这位就是高手PB + 20 技术 + 2
    • jeeee: 速度非常快技术 + 1
    • CrLf: 乐于助人技术 + 1

TOP

回复 10# jeeee


    你这是回复谁呢?

TOP

回复 12# jeeee


你的意思是多条重复数据只记录一次吧?
好办,select * 改成 select DISTINCT  *
1

评分人数

    • jeeee: 热心助人为乐技术 + 1

TOP

你原文件中的重复数据可能正好是整行内容完全相同,即除了第一列外日期部分也相同,所以过滤后只显示了一条结果。
你仔细看看是不是这样。

TOP

回复 18# yyykkkyyyy

楼上的多心了,我只是看到8楼没有代码,以为楼主回复错了,没有细看,所以问了一下。

批处理是一个很常用的概念和技术,永远不可能过时。
但批处理bat脚本毕竟功能有限,有些事情虽然也可以完成,但效率就要大打折扣。
就好比要过滤文本中含有特定字符的行,单纯用cmd.exe的内部命令也可以实现(比如for /f 读取, 用!var!跟!var:str=!进行比较)
但有一些外部命令如find.exe/findstr.exe,甚至第三方工具如sed.exe/awk.exe等,做起来更完美、效率更高,为什么不去用它们呢?
用合适的工具做合适的事,也是一种技巧。

TOP

回复 20# jeeee


    现在就是这样做的。
你在原文件中搜索一下我的代码结果中你认为是非重复行的,比如“PBFBEPB110240001,2011/3/13,3:23:32”,看看原文件中有没有它的重复行。
或者你取部分数据压缩上传,以助于更好的分析。

TOP

这个文件中没有重复行。
s = AdoRs.GetString(2, n, ",", "\r\n");
改成
s = "";
if (n>0) s = AdoRs.GetString(2, n, ",", "\r\n");

TOP

返回列表