用于从目标文件夹/文件中提取电子邮件地址的批处理脚本

时间:2012-09-11 15:45:25

标签: email batch-file cmd extract

程序:命令提示符(CMD)批处理脚本

我有一个充满大量文件的文件夹。在这些文件中有许多电子邮件地址与其他misc混合。文字垃圾。我想要一种方法从每个文件中提取这些电子邮件地址,并创建一个新文件(.txt),尽可能清楚地列出每个文件。

我已经花了好几个小时找到一个不错的正则表达式'代码':“ [.A-Z -_] @ [.A-Z -_]

这个表达式来自于Google可以检测到的关于此主题的唯一其他论坛主题 - 我觉得这令人震惊。那个帖子可以在这里找到: https://stackoverflow.com/questions/7911482/extract-email-from-text-file-using-batch-job

在该主题上,名为 Hand-E-Food 的人创建了以下.bat脚本,以从所选文件/文件夹中提取电子邮件地址:

@Echo Off
For /F "tokens=*" %%A In ('FindStr /R /I "[\.A-Z\-_]*@[\.A-Z\-_]*" "results.txt"') Do Call :ExtractEmail "%%A"
Exit /B

:ExtractEmail
Set "Email=%~1"
Set "Email=%Email:*<=%"
Set "Temp=%Email:*>=>%"
Call Set "Email=%%Email:%Temp%=%%"
Echo %Email%>emails.txt
Exit /B

令人惊讶的是,他忽略了完全错误测试他的代码,遗憾的是它没有用 - 正如原始海报所提到的那样。令人讨厌的是,他从未回应纠正他的错误,现在主题已经结束。

这将我们带到这里:一个新话题,提出应该在2011年得到回答的同一个问题,但事实并非如此。因此,如果有人可以帮助我想象的可能是一个相当简单的代码,我会认为是一个非常有用的能力,请借给我们你的专业知识。

P.S。请不要像手工食品那样,而忽略了仔细检查您的代码是否有效。此外,我在命令提示符方面有一些经验,但是许多查看此主题的用户都没有任何经验,因此请在代码中使用一些符号来解释 - 至少稍微 - 发生了什么。

请记住:我们当中没有人知道我们现在所知道的一切,只有善良的人才能向我们解释,完全,以及如何做我们从一开始就学到的东西。请完整解释

非常感谢,

分步

1 个答案:

答案 0 :(得分:4)

嗯,这是一个可以解决问题的替代脚本:

@echo off
set INPUT_FILE=results.txt
set OUTPUT_FILE=emails.txt
set "REGEXP=[\.A-Z\-_][\.A-Z\-_]*@[\.A-Z\-_][\.A-Z\-_]*"
>nul copy nul %OUTPUT_FILE%
for /f "tokens=*" %%a in (%INPUT_FILE%) do for %%b in (%%a) do (
    for /f %%z in ('echo %%b ^| findstr /R /I "%REGEXP%"') do (
        echo %%z >> %OUTPUT_FILE%
    )
)

这很简单:外部循环遍历INPUT_FILE中每行中以空格分隔的字符串,内部循环使用正则表达式过滤电子邮件并将其附加到OUTPUT_FILE

希望它有所帮助!

编辑:我改进了正则表达式,以便更准确地捕获电子邮件模式。它仍然不完美,但如果您对更好的表达感兴趣,可以查看this site