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



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

我有一个文件夹,里面装满了很多文件。在这些文件中,有许多电子邮件地址与其他杂项混杂在一起。文本垃圾。我想用一种方法从每个文件中提取这些电子邮件地址,并创建一个新文件(.txt),尽可能清楚地列出每个文件。

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

令人惊讶的是,这个表达源于谷歌能够检测到的唯一一个关于这个话题的论坛帖子——我觉得这太令人震惊了。该线程可在此处找到: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.请不要像Hand-E-Food那样,忽略仔细检查您的代码是否正常工作。此外,我在命令提示符方面有少量的经验,但许多查看此线程的用户将没有任何经验,所以请在代码中使用一些符号来解释——至少稍微解释一下——发生了什么。

请记住:我们现在都不知道我们所知道的一切,只有通过善良的人向我们解释,完全,我们才知道如何做我们最初学到的事情。请充分解释

谢谢大家,

逐步

好吧,这里有一个替代脚本可以做到这一点:

@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

希望它能有所帮助!

EDIT:我改进了正则表达式,使其能够更准确地捕获电子邮件模式。它仍然不完美,但如果你对更好的表达感兴趣,你可以看看这个网站。

相关内容

最新更新