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

Printed on: April 24, 2024 at 02:04 o'clock

Member: colinardo
colinardo Mar 29, 2017 updated at 14:26:03 (UTC)
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
Member: colinardo
colinardo Mar 31, 2017 updated at 13:52:46 (UTC)
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.