3

プログラム:コマンド プロンプト (CMD) バッチ スクリプト

たくさんのファイルでいっぱいのフォルダがあります。これらのファイル内には、他の雑多なメール アドレスが多数含まれています。テキストジャンク。これらの電子メール アドレスをファイルから抽出し、新しいファイル (.txt) を作成して、それぞれをできるだけ明確にリストする方法が必要です。

私はすでにまともな正規表現の「コード」を見つけるのに何時間も費やしました: " [.AZ-_] @[.AZ-_] "

この表現は、驚くべきことに、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 年に答えられるべきだったのに、答えられなかったのと同じ質問をする新しいトピックです。したがって、非常に有用な能力であると私が考える、おそらくかなり単純なコードであると私が想像するものを誰かが助けることができる場合は、あなたの専門知識を私たちに貸してください.

PS Hand-E-Food のように、コードが機能することを再確認することを怠らないでください。また、私はコマンド プロンプトの経験が少しありますが、このスレッドを見る多くのユーザーはまったく経験がないため、コード内で何らかの表記を使用して、何が起こっているのかを少なくとも少し説明してください。

覚えておいてください: 私たちの誰も、私たちが今知っていることすべてを知っていませんでした。最初に学んだことを行う方法を完全に説明してくれたのは、親切な人々を通してのみでした. 十分に説明してください。

本当にありがとう、

ステップバイステップ

4

1 に答える 1

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

それが役に立てば幸い!

編集:電子メールのパターンをより正確にキャプチャするように、正規表現を改善しました。まだ完璧ではありませんが、より良い表現に興味がある場合は、このサイトをチェックしてください。

于 2012-09-11T16:51:18.370 に答える