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

[文本处理] 【已解决】求批处理:在B文本中直接删除与A文本重复的Email

本帖最后由 gu3669 于 2019-8-25 22:15 编辑

求批处理:在B文本中直接删除与A文本重复的Email

示例
B文本:(多数Email两头有空格,但也有没空格的)
景峰电脑科技有限公司 cdep@cninfo.net;中国法制报 zgfzb889@163.com。海南华清中学hnhuaqing@sina.com,阳光育英私立学堂 h666xtimes@vip.sina.com

A文本:(每个Email单占一行)
gzdenghang@126.com
zgfzb889@163.com
head@swzaob.com
h666xtimes@vip.sina.com
hsr000bck@yahoo.com.cn
lu_luyiru@yahoo.com.cn
nashui_ren@sina.com


A文本第二第四行与B文本第二第四重复,是应该删除的
运行批处理之后的B文本应该是这样:
景峰电脑科技有限公司 cdep@cninfo.net;中国法制报 。海南华清中学hnhuaqing@sina.com,阳光育英私立学堂


盼望高手帮忙解决,衷心感谢!!

本帖最后由 WHY 于 2019-8-27 00:13 编辑

Test.ps1
  1. $dic = New-Object 'System.Collections.Generic.Dictionary[string, int]';
  2. forEach( $a In (gc a.txt -ReadCount 0) ){ if( !$dic.ContainsKey($a) ){ $dic.Add($a, 1) }};
  3. $str = [IO.File]::ReadAllText('b.txt', [Text.Encoding]::Default);
  4. $str = [regex]::Replace($str, '(?i)[a-z\d][\w.-]+@([a-z\d][\w-]+\.){1,3}[a-z]{2,4}', {
  5.     param($m);
  6.     if( $dic.ContainsKey($m.Value) ){ '' } else { $m.Value }
  7. });
  8. [IO.File]::WriteAllText('c.txt', $str, [Text.Encoding]::Default);
复制代码
运行方法:1.右键单击,使用 PowerShell 运行;2.或者,在 CMD 窗口,cd /d 切换到脚本目录,输入:PowerShell -exec Bypass "&'.\Test.ps1'"

Test.JS
  1. var map = [];
  2. var fso = new ActiveXObject('Scripting.FileSystemObject');
  3. var f1  = fso.OpenTextFile('a.txt', 1);
  4. var f2  = fso.OpenTextFile('b.txt', 1);
  5. while( !f1.AtEndOfStream ) map[f1.ReadLine()] = 1;
  6. var str = f2.ReadAll().replace(
  7.     /[a-z\d][\w.-]+@([a-z\d][\w-]+\.){1,3}[a-z]{2,4}/ig,
  8.     function($0){ return map[$0] ? '' : $0; }
  9. )
  10. fso.OpenTextFile('c.txt', 2, true).Write(str);
  11. WSH.Echo('Done');
复制代码

TOP

谢谢你的帮助。不过刚刚运行了批处理后,B文本里没有任何变化,是哪里有错?

TOP

本帖最后由 flashercs 于 2019-8-25 20:31 编辑

batch
  1. @echo off
  2. pushd "%~dp0"
  3. Powershell -NoProfile -Command "Get-Content A.txt|ForEach-Object -Begin {$str=Get-Content B.txt|Out-String} -Process {$str=$str.Replace($_,'')} -End {$str|Out-File -FilePath B.txt}"
  4. popd
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

这个脚本运行应该是挺麻烦的吧,我不太会啊,我想要的是那种简单的.bat批处理文件,能不能麻烦你给我一个那样的?

TOP

回复 5# gu3669

4楼是bat 批处理
微信:flashercs
QQ:49908356

TOP

运行很成功,非常感谢你的热心帮助,也谢谢二楼的朋友。

TOP

返回列表