程序:命令提示符(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一样忽略双重检查您的代码是否有效。此外,我在命令提示符方面有一点经验,但是许多查看此线程的用户根本没有任何经验,因此请在代码中使用一些符号来解释 - 至少稍微解释一下正在发生什么。
记住:我们当中没有人知道我们现在知道的一切,只有通过善良的人们向我们充分解释如何做某事,我们才学会了。请充分解释。
谢谢大家,
StepbyStep
Echo%Email%> emails.txt
使用单个>
,它将覆盖emails.txt
,因此您需要使用Echo%Email%>> emails.txt
进行附加。ExtractEmail
中的代码似乎期望findstr
发出由>*
和<*
分隔的单个地址,但事实并非如此,因此该文件为空,因为Call Set“Email =%% Temp%=%%”
使%Email%
为空,因此Echo%Email%
调用没有参数的echo,打印echo is off
。 - Alex K.findstr
测试过那个针对 FAILURE 的正则表达式?我一直在传递非法的电子邮件地址,例如@gmail.com
,但它仍然让它们通过。 - James K