Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Emailadressen aus String parsen (per Batch)

Mitglied: 56921

56921 (Level 1)

26.07.2010 um 13:14 Uhr, 5114 Aufrufe, 8 Kommentare

Hallo,

ich bin gerade etwas ratlos, wie ich aus einem String eine Emailadresse herausparsen kann. Schwierigkeit ist dabei, dass die Strings nicht in einem eindeutigem Format vorliegen, sondern z.B. so:
  1. From: "Horst Schlemmer" <horst@schlemmer.de>
  2. From: Horst Schlemmer aus Grevenbroich <horst@schlemmer.de>
  3. From: <horst@schlemmer.de>
  4. From: "horst@schlemmer.de"
  5. From: horst@schlemmer.de
usw.

Bisher habe ich das hier probiert, was mir zumindest schon mal den Domainpart liefert:
FOR /F "tokens=1,2* delims=@" %%I IN ('FINDSTR /R ^From: %FULLPATH%\%FILENAME%') DO CALL :set_var_once "%%I" "%%J"
Mein Problem ist der Hostpart, da ich ja gerade bei Leerzeichen nicht weiß, wieviele Tokens dazu vorhanden sind.

Ich wäre für eine Lösung (oder eine Idee für eine Lösung ) sehr dankbar!

Gruß,
Carsten
Mitglied: Friemler
26.07.2010 um 15:39 Uhr
Hallo carsten-h,

hier ein Vorschlag zur Lösung Deines Problems:

01.
@echo off 
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
 
06.
FOR /F "tokens=1,2* delims=@" %%I IN ('FINDSTR /R ^From: %FULLPATH%\%FILENAME%') DO ( 
07.
  set "p1=%%I" 
08.
  set "p2=%%J" 
09.
   
10.
  set p1=!p1:"=! 
11.
  set p2=!p2:"=! 
12.
   
13.
  set "p1=!p1:<=!" 
14.
  set "p2=!p2:>=!" 
15.
 
16.
  set "p1=!p1:&=!" 
17.
  set "p2=!p2:&=!" 
18.
 
19.
  call :getadr "!p1!" "!p2!" 
20.
   
21.
  echo !address! 
22.
23.
 
24.
exit /b 
25.
 
26.
endlocal 
27.
 
28.
 
29.
 
30.
:getadr 
31.
setlocal 
32.
 
33.
set "hst=%~1" 
34.
set "dom=%~2" 
35.
   
36.
:loop1 
37.
  set chr=%hst:~-1% 
38.
  if "%chr%" neq " " set host=%chr%%host% 
39.
  set hst=%hst:~0,-1% 
40.
if "%chr%" neq " " goto loop1 
41.
 
42.
 
43.
:loop2 
44.
  set chr=%dom:~0,1% 
45.
  if "%chr%" neq " " set domain=%domain%%chr% 
46.
  set dom=%dom:~1% 
47.
if "%dom%" neq "" if "%chr%" neq " " goto loop2 
48.
 
49.
 
50.
endlocal & set address=%host%@%domain% 
51.
exit /b

Die Zeichen <, >, " und & werden aus dem String herausgefiltert (< nur beim ersten Teil, der den Host enthält, > nur beim zweiten Teil, der die Domain enthält). Vor der EMail-Adresse muss dann ein Leerzeichen stehen, danach auch ein Leerzeichen oder der String muss direkt zu Ende sein.

[Edit]
Die o.g. Zeichen können zwar Bestandteil einer EMail-Adresse sein, aber hast Du sowas in der Liste?

Gruß
Friemler
Bitte warten ..
Mitglied: TsukiSan
27.07.2010 um 05:19 Uhr
Hallo carsten-h,

also mein erster Vorschlag wäre:
- Kann das Programm, was diese Dateien mit Email-Adressen erzeugt, diese nicht in ein(e) geordnete(s) und immer
wiederkehrende(s) Form/Format bringen?
Das würde im Anschluss einen "Kleinzeiler" erzeugen, der dir die Adressen dann rausfiltert und das ganze mit ganz wenig Mühe.
Also wenn diese Möglichkeit besteht, würde ich hier erst einmal an der "Quelle schrauben".

Gruss
Tsuki
Bitte warten ..
Mitglied: TsukiSan
27.07.2010 um 05:40 Uhr
....ansonsten hätte ich auch noch etwas verrücktes in VBS anzubieten:
01.
Dim Filter 
02.
 
03.
MeineDatei = "C:\Email.txt" 
04.
Filter = Array("<",">",Chr(34)) 
05.
 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MeineZeilen = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll,vbCrLF)  
08.
 
09.
For i = 0 to Ubound(MeineZeilen) 
10.
	temp = split(MeineZeilen(i) , " ") 
11.
	For j = 0 to Ubound(temp) 
12.
		temp1 = Split(temp(j), "@") 
13.
		If Ubound(temp1) > 0 then 
14.
			MeineEmail = Join(temp1 , "@") 
15.
			For k = 0 to Ubound(Filter) 
16.
				MeineEmail = Replace(MeineEmail,Filter(k),"") 
17.
			Next 
18.
			Msgbox MeineEmail 
19.
			j = Ubound(temp) 
20.
		End If 
21.
	Next 
22.
 
23.
Next
Gruss
Tsuki
Bitte warten ..
Mitglied: pieh-ejdsch
27.07.2010 um 14:13 Uhr
da in einer Emailadresse keine Leerzeichen vorkommen und es immer der letzte Teil String ohne Leerzeichen ist, könnte es auch kürzer gehen.
gültige Zeichen in einer Mailadresse sind
A-Za-z0-9.!#$%&'*+-/=?^_`{|}~

hier sind aber Eventuelle Leerzeichen hinter dem letzten String berücksichtigt.
01.
@echo off & setlocal 
02.
set fullpath=D:\Adminhelp 
03.
set filename=Testdokument.txt 
04.
FOR /f "tokens=1*" %%i IN ('FINDSTR /b /c:"From:" "%FULLPATH%\%FILENAME%"') do ( 
05.
	set "Mail=%%j" 
06.
	setlocal enabledelayedexpansion 
07.
	set "Mail=!Mail:"=!" 
08.
	set "Mail=!Mail:<=!" 
09.
	set "Mail=!Mail:>=!" 
10.
	echo "!Mail!"|findstr /v "* ?">nul&&(for %%k in ("!Mail: =" "!") do echo "%%~k"|find "@">nul&&set "Mail=%%~k")||call :Mail 
11.
	echo "!Mail!"|find "@">nul&&echo !Mail! 
12.
	endlocal 
13.
14.
pause>nul&goto :eof 
15.
:Mail 
16.
if not "!Mail:* =!" == "!Mail!" echo "!Mail:* =!"|find "@">nul&&(set "Mail=!Mail:* =!"&goto :Mail)
die Sprungmarke :Mail ist nur eingefügt, da die Platzhalter in der Forschleife in Zeile 10 eine Datei suchen würden.

@Friemler
das & brauchst Du doch nicht herausfiltern...

Gruß Phil
Bitte warten ..
Mitglied: Friemler
28.07.2010 um 13:21 Uhr
Hallo pieh-ejdsch,

Zeile 10 ist ja eine echte Breitseite, verliere doch noch mal ein paar Worte darüber, was Du Dir dabei gedacht hast/wie es funktioniert.

Gruß
Friemler
Bitte warten ..
Mitglied: pieh-ejdsch
28.07.2010 um 16:15 Uhr
Moin Friemler,

ja das ist wirklich ein klein wenig äähm Erklärungsbedürftig...

echo "!Mail!"|findstr /v "* ?">nul
FINDSTR gibt eine Erfolgsmeldung wenn KEINE * oder ? in der Variable Zeile gefunden werden - ansonsten keine Erfolgsmeldung (%ERRORLEVEL%>0)

&& Befehl wird nur ausgeführt, wenn der vorherige Befehl erfolgreich war || Dieser Befehl wird nur ausgeführt, wenn der Vorherige Nicht Erfolgreich war

da die Schleife
for %k in ("abc*") do echo %k...
for %k in ("abc?") do echo %k...
das aktuelle Verzeichnis nach Namen abc.... bzw abc. durchsucht fasst es leider in die Grütze, wenn in der Variable die Platzhalterzeichen ? * (Fragezeichen, Sternchen) enhalten sind.
es kann ja sein in der Variable ist es doch drin - wenn ja wird der String halt in der Subroutine bearbeitet halt nur langsamer.
for %%k in ("!Variable: =" "!") do ....
die Variable anstelle der Leerzeichen mit einem Anführungszeichen davor und danach anzeigen, damit ich in der Laufvariable %%k zum Beispiel "Herr&Mann" stehen habe oder "Susi(Susann)" diese Ausfilterung in der Forschleife geht doch zig mal schneller
for %i in (a b c d) do echo %i...
geht ja noch wie gewollt - aber
for %i in (a(abc) b c) do echo %i...
geht net mehr - daher so
for %i in ("a(abc)" "b" "c") do echo %i

Gruß Phil
Bitte warten ..
Mitglied: Friemler
29.07.2010 um 01:50 Uhr
Hallo pieh-ejdsch,

danke für die Erklärung. Ich habe Deinen Code ausführlich getestet und kann sagen, daß er in allen Fällen fehlerfrei gelaufen ist. Gute Arbeit.


ACHTUNG! Ich poste den Code von pieh-ejdsch hier nochmal in einer besser lesbaren Form, der Algorithmus ist aber NICHT von mir!


01.
@echo off 
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
set "fullpath=%cd%" 
06.
set "filename=emails.txt" 
07.
 
08.
for /f "tokens=1*" %%i IN ('findstr /b /c:"From:" "%fullpath%\%filename%"') do ( 
09.
  set "Mail=%%j" 
10.
 
11.
  set "Mail=!Mail:"=!" 
12.
  set "Mail=!Mail:<=!" 
13.
  set "Mail=!Mail:>=!" 
14.
 
15.
  rem Enthält die Zeile Wildcards? 
16.
  echo "!Mail!"|findstr /v "* ?" > NUL 
17.
 
18.
  if !errorlevel! equ 0 ( rem Keine Wildcards 
19.
    for %%k in ("!Mail: =" "!") do ( 
20.
      echo "%%~k"|find "@" > NUL 
21.
      if !errorlevel! equ 0 set "Mail=%%~k" 
22.
23.
  ) else ( rem Mit Wildcards 
24.
    call :ParseLineWithWildcards 
25.
26.
 
27.
  echo "!Mail!"|find "@" > NUL 
28.
  if !errorlevel! equ 0 echo !Mail! 
29.
30.
 
31.
endlocal 
32.
 
33.
echo. 
34.
pause 
35.
exit /b 
36.
 
37.
 
38.
:ParseLineWithWildcards 
39.
if not "!Mail:* =!" equ "!Mail!" ( 
40.
  echo "!Mail:* =!"|find "@" > NUL 
41.
 
42.
  if !errorlevel! equ 0 ( 
43.
    set "Mail=!Mail:* =!" 
44.
    goto :ParseLineWithWildcards 
45.
46.
)
Gruß
Friemler
Bitte warten ..
Mitglied: 56921
30.07.2010 um 10:28 Uhr
Zitat von Friemler:
Hallo pieh-ejdsch,

danke für die Erklärung.

Dem kann ich mich nur anschließen! Funktioniert super! Respekt!

Danke & Gruß,
Carsten
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch String bzw. Textdatei mittels Regex durchsuchen und String ausgeben

gelöst Frage von aysxdcBatch & Shell3 Kommentare

Hallo, ich möchte mit einer Batch eine Datei durchsuchen. Z. B: Ich will nach "ProjectCompatibilityVersion=" suchen um auf den ...

Sonstige Systeme

Software zum Parsen von Emails und PDFs

Frage von Zero01Sonstige Systeme12 Kommentare

Hallo, ich suche für die Firma bei der ich zur Zeit arbeite eine Software mit der man Emails und ...

Batch & Shell

Ini file powershell parse

gelöst Frage von kotb92Batch & Shell3 Kommentare

Hallo zusammen, Ich habe ein paar solche 'ini' Dateien die ich mit Powershell in eine csv Datei parsen möchte. ...

Windows 7

Microsoft.NET Framework Parser Konfigurationsfehler

gelöst Frage von DasJulianWindows 72 Kommentare

Schönen guten Tag alle zusammen, und zwar bin ich heute früher von meiner Arbeit nachhause gekommen und wollte dann ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 2 TagenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 3 TagenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 3 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 4 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement19 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Netzwerkgrundlagen
VLAN - Offene Fragen
Frage von KnettenbrechNetzwerkgrundlagen17 Kommentare

Hallo zusammen, ich befasse mich derzeit mit dem Thema VLAN. Hierzu habe ich schon einige Guides gelesen, einschließlich des ...

Google Android
Empfehlung: Android Ortungsapp
gelöst Frage von certifiedit.netGoogle Android13 Kommentare

Guten Morgen, grundsätzlich vorweg, ich wollte mich eben schlau machen, bzgl einer Ortungsapp, welche Androidbasiert einem anderen Androidsmartphone mitteilt, ...

Router & Routing
VPN hinter zweiter Fritzbox nutzen im Nachbarhaus
gelöst Frage von georg2204Router & Routing11 Kommentare

Hallo zusammen, ich blicke hier leider nicht mehr so ganz durch. In Haus 1 steht eine Fritzbox 7390, diese ...