ellocko94
Goto Top

Daten aus dem Feld "date sent" in den Titel schreiben

Hallo zusammen,

ich habe folgendes Problem:

Ich habe eine große Sammlung von .EML Dateien, die nicht aussagekräftig benannt sind.
Ich würde die Dateien gern so umbenennen, dass das Attribut aus dem Feld "date sent" in den Titel integriert wird (am Besten direkt am Anfang).

Ich könnte mir vorstellen, dass man dazu eine .bat Datei nutzen kann. Auf dem Gebiet bin ich allerdings ein totaler Neuling. Kann mir jemand von euch helfen?

LG ellocko

PS: Es geht nicht um das Erstell- oder Bearbeitungsdatum

Content-Key: 333540

Url: https://administrator.de/contentid/333540

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: colinardo
colinardo 29.03.2017 aktualisiert um 16:26:03 Uhr
Goto Top
Servus @ellocko94, willkommen auf Administrator.de.
Habe ich hier etwas ähnliches schon mal gespostet. Hier ein Powershell-Skript angepasst an deine Anforderung (benötigt zwingend ein installiertes Outlook!). Ordner in dem sich die EML-Dateien befinden bitte in der zweiten Zeile anpassen.
(p.s. Die EML-Dateien müssen sich mit Outlook öffnen lassen, bitte teste dies vorher.)
# Ordner der die EML-Dateien enthält
$folder = 'D:\eml'  
# Outlook COM-Object holen
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$ol = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$ol){$ol = New-Object Outlook.Application}

# Für jede EML-Datei im Ordner (inkl. Unterordner)
gci $folder -Filter *.eml -recurse | ?{!$_.PSIsContainer} | %{
    # öffne die EML-Datei mit Outlook
    start-process outlook.exe -ArgumentList "/eml `"$($_.FullName)`""  
    # warten bis inspector die mail geöffnet hat
    while (!$ol.ActiveInspector().CurrentItem){sleep .2}
    # mail referenzieren
    $mail = $ol.ActiveInspector().CurrentItem
    $datesend = $mail.SentOn.toString("yyyyMMdd_HHmmss")  
    # mail schließen
    $mail.Close($false) | out-null
    # mail umbenennen
    $_ | rename-item -NewName "$($datesend)_$($_.Name)" -Force -Verbose  
}
Falls Outlook nicht verfügbar sein sollte, dürfte es auch mit folgender Methode funktionieren:
# Ordner der die EML-Dateien enthält
$folder = 'D:\eml'  

# Für jede EML-Datei im Ordner (inkl. Unterordner)
gci $folder -Filter *.eml -recurse | ?{!$_.PSIsContainer -and ((gc $_.FullName -raw) -match '(?ims)^Date:\s*([^\r\n]+)')} | %{  
    $datesent = [datetime]::MaxValue
    if ([datetime]::TryParse([string]$matches[1].Trim(),[ref]$datesent)){    
        # mail umbenennen
        $_ | rename-item -NewName "$($datesent.toString('yyyyMMdd_HHmmss'))_$($_.Name)" -Verbose  
    }else{
        write-host "Datum für Datei '$($_.Fullname)' wurde nicht erkannt." -F Yellow  
    }
}
Grüße Uwe
Mitglied: colinardo
colinardo 31.03.2017 aktualisiert um 15:52:46 Uhr
Goto Top
Gibt's noch Fragen/Unklarheiten?
Wenns das dann war, bitte nicht vergessen den Beitrag noch auf gelöst zu setzen, und Lösungen zu markieren. Merci.