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

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

[复制链接]
发表于 2019-8-25 15:51:16 | 显示全部楼层 |阅读模式
本帖最后由 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,阳光育英私立学堂


盼望高手帮忙解决,衷心感谢!!
发表于 2019-8-25 20:04:00 | 显示全部楼层
本帖最后由 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');
复制代码
 楼主| 发表于 2019-8-25 20:23:48 | 显示全部楼层
谢谢你的帮助。不过刚刚运行了批处理后,B文本里没有任何变化,是哪里有错?
发表于 2019-8-25 20:27:36 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
gu3669 + 1 乐于助人

查看全部评分

 楼主| 发表于 2019-8-25 20:33:55 | 显示全部楼层
这个脚本运行应该是挺麻烦的吧,我不太会啊,我想要的是那种简单的.bat批处理文件,能不能麻烦你给我一个那样的?
发表于 2019-8-25 20:43:04 | 显示全部楼层
回复 5# gu3669

4楼是bat 批处理
 楼主| 发表于 2019-8-25 22:11:16 | 显示全部楼层
运行很成功,非常感谢你的热心帮助,也谢谢二楼的朋友。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:09 , Processed in 0.021962 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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