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

[文本处理] 【已解决】用批处理怎样实现从文本中查找特定字符串

[复制链接]
发表于 2018-1-31 23:41:45 | 显示全部楼层 |阅读模式
本帖最后由 思想之翼 于 2018-2-2 01:51 编辑

D:\01\文件夹内有7315个文本,命名0001-7315,每个文本记录若干行数据,格式为
0123
3258
9871
...
D:\02\文件夹内有7315个文本,命名0001-7315,每个文本记录一行数据,格式为
0123

若D:\01\0001.txt包含D:\02\0001.txt,则为真
若D:\01\0002.txt不包含D:\02\0002.txt,则为假
若D:\01\0003.txt包含D:\02\0003.txt,则为真
...
若D:\01\7315.txt包含D:\02\7315.txt,则为真

然后统计共有多少真,比如有7311个真,则将7311写入D:\03\统计.txt
发表于 2018-2-1 02:05:10 | 显示全部楼层
没看明白
 楼主| 发表于 2018-2-1 08:57:26 | 显示全部楼层
回复 2# Blitz

比如D:\01\0001.txt内数据是
1234
2345
5678
D:\02\0001.txt内数据是
2345
即D:\01\0001.txt的数据包含D:\02\0001.txt的数据
同理比较D:\01\与D:\02\内对应同名文本内的数据,之后统计包含的文本共有多少
发表于 2018-2-1 11:09:53 | 显示全部楼层
本帖最后由 WHY 于 2018-2-1 13:33 编辑

test.js
  1. var srcDir1 = 'D:/01';
  2. var srcDir2 = 'D:/02';
  3. var dstDir  = 'D:/03';

  4. var totalNum = 0;
  5. var fso = new ActiveXObject('Scripting.FileSystemObject');
  6. var e = new Enumerator(fso.GetFolder(srcDir1).files);

  7. if(!fso.FolderExists(dstDir)) fso.CreateFolder(dstDir);

  8. for(; !e.atEnd(); e.moveNext()){
  9.     var srcFile1 = e.item().Path;
  10.     var srcFile2 = srcDir2 + '/' + e.item().Name;

  11.     if(/\.txt$/i.test(srcFile1) && fso.FileExists(srcFile2)){
  12.         totalNum += IsContained(srcFile1, srcFile2);
  13.     }
  14. }

  15. function IsContained(srcFile1, srcFile2){
  16.     var str1 = fso.OpenTextFile(srcFile1, 1).ReadAll();
  17.     var str2 = fso.OpenTextFile(srcFile2, 1).ReadLine();

  18.     var reg = new RegExp('^' + str2 + '$', 'mi');
  19.     if(reg.test(str1)) { return 1; } else return 0;
  20. }

  21. fso.OpenTextFile(dstDir + '/统计.txt', 2, true).WriteLine(totalNum);

  22. WSH.Echo('Done!')
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 运行正确,感谢分享

查看全部评分

发表于 2018-2-1 13:35:35 | 显示全部楼层
本帖最后由 WHY 于 2018-2-11 01:33 编辑

test.ps1
  1. $srcDir1 = 'D:\01';
  2. $srcDir2 = 'D:\02';
  3. $dstDir  = 'D:\03';

  4. $totalNum = 0;
  5. If(!(Test-Path $dstDir)){$null = New-Item $dstDir -ItemType directory;}

  6. $di = New-Object IO.DirectoryInfo($srcDir1);
  7. $fi = $di.GetFiles('*.txt', [IO.SearchOption]::TopDirectoryOnly);
  8. $count = $fi.Count;

  9. For($i=0; $i -lt $count; $i++){
  10.     $srcFile1 = $fi[$i].FullName;
  11.     $srcFile2 = $srcDir2 + '\' + $fi[$i].Name;
  12.     If(Test-Path $srcFile2){
  13.         $arr = [IO.File]::ReadAllLines($srcFile1, [Text.Encoding]::Default);
  14.         $str = type $srcFile2 -ReadCount 1;
  15.         If($arr -Contains $str){ $totalNum++; }
  16.     }
  17. }

  18. $totalNum > ($dstDir + '\统计.txt')
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2019-2-12 15:48:33 | 显示全部楼层
本帖最后由 思想之翼 于 2019-2-12 17:47 编辑

回复 4# WHY 感谢帮助!如果文本数据格式由竖排变为横排,比如D:\01\0001.txt内数据是
1234
2345
5678

现在改变为
1234 2345 5678
D:\02\0001.txt内数据是
2345
您的代码如何修改?
发表于 2019-2-12 18:44:22 | 显示全部楼层
回复 6# 思想之翼

第 24 行:
  1. var reg = new RegExp('\\b' + str2 + '\\b');
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢分享

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-18 22:44 , Processed in 0.020289 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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