Board logo

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

作者: 思想之翼    时间: 2018-1-31 23:41     标题: 【已解决】用批处理怎样实现从文本中查找特定字符串

本帖最后由 思想之翼 于 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
作者: Blitz    时间: 2018-2-1 02:05

没看明白
作者: 思想之翼    时间: 2018-2-1 08:57

回复 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\内对应同名文本内的数据,之后统计包含的文本共有多少
作者: WHY    时间: 2018-2-1 11:09

本帖最后由 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!')
复制代码

作者: WHY    时间: 2018-2-1 13: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')
复制代码

作者: 思想之翼    时间: 2019-2-12 15:48

本帖最后由 思想之翼 于 2019-2-12 17:47 编辑

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

现在改变为
1234 2345 5678
D:\02\0001.txt内数据是
2345
您的代码如何修改?
作者: WHY    时间: 2019-2-12 18:44

回复 6# 思想之翼

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





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2