2017-02-22 5 views
0

Ich habe eine Reihe von verschachtelten Ordnern in einem Windows 7-Betriebssystem, alle Dateien halten. Die Dateien sind Word und Excel. Ich mag die Autoren, Besitzer extrahieren, Datum Modified und Datum Metadatenfeld aus jeder Datei und Ausgabe in eine Textdatei erstellt.Metadaten aus Word- und Excel-Dateien extrahieren?

Mein erster Versuch, dies zu tun umfasste die Verwendung von PowerShell. The code presented by the OP here funktioniert gut, aber nicht durch die Ordner recurse. Ich habe mit verschiedenen Methoden experimentiert, um "Get-ChildItem" mit der funMetadata-Funktion zu kombinieren, konnte dies aber nicht. Da es für das OP nicht funktionierte und es keine Lösungen von der SO-Community gab, schien es unklug zu versuchen, weiterhin diesen Code zu reparieren. Stattdessen konzentrierte ich mich auf die Änderung der OP-Lösung (siehe unten), indem ich meine eigenen Metadatenfelder ersetzte, aber die ausgegebene Textdatei sagt einfach "Autoren" gefolgt von einer leeren Seite. Hier ist, was ich versuchte:

(zum Stammordner navigieren): Get-ChildItem -Recurse | Select-Object Authors | Out-file "C:\text5.txt"

(By the way, die Metadaten existieren definitiv innerhalb der Dateien - ich weiß, das durch den ursprünglichen des OP verwenden, nicht-able-to-recurse Skript).

Ich versuchte eine andere Wende, ich heruntergeladen zwei Python-Module - hachoir und oletools - aber sobald ich sie installiert hatte, wusste ich nicht, wo ich anfangen soll. Es scheint nicht, als ob es irgendwelche Unterlagen gibt.

Hat jemand einen Ratschlag für mich?

EDIT: Ich habe gerade einige neue Informationen here gefunden, und das ist wahrscheinlich eine doppelte Frage. Ich hasse es jetzt zu löschen, falls jemand an einer Antwort arbeitet. Entschuldigung für jede Verwirrung

Antwort

1

Sie können immer noch PowerShell verwenden, Sie mussten nur alles zusammenbinden, um alle Ihre Dateien zu durchlaufen.

$RootFolder = "C:\example" 
$files = Get-ChildItem $RootFolder -Recurse 
foreach ($file in $files) { 
    $Folder = Split-Path $File.FullName 
    $FileName = Split-Path $File.FullName -Leaf 
    $Shell = New-Object -ComObject Shell.Application 
    $FolderObject = $Shell.namespace($Folder) 
    $FileObject = $FolderObject.ParseName($FileName) 
    $FolderObject.GetDetailsOf($FileObject,-1) 
} 

Hinweis: Das zurückgegebene Objekt von Get-ChildItem nicht den Autor Metadaten, also wenn Sie Select-Object verwenden erstellt es eine leere Eigenschaft.

+0

Vielen Dank @BenH - das funktioniert super! Ich lege | Out-Datei C: \ metadata6.txt -Absetzen nach Ihrem "-1)", um eine Textdatei zu erhalten. Eine Sache ist jedoch seltsam: Für die Hälfte der extrahierten Dateien gibt es keine "Titel" -Metadaten. Weißt du, warum das der Fall sein könnte? Die meisten dieser nicht betitelten Einträge befanden sich in einem Unterordner. – oymonk

+0

Ich weiß nicht warum. Die Methode 'GetDetailsOf' sollte alle nicht leeren Felder ziehen. Auch wenn eine Antwort für Sie funktioniert, ist es die beste Vorgehensweise, sie zu akzeptieren. – BenH

+0

Vielen Dank für die großartige Lösung. – oymonk

Verwandte Themen