2017-02-22 67 views
0

У меня есть серия вложенных папок в операционной системе Windows 7, где хранятся файлы. Это файлы Word и Excel. Я хотел бы, чтобы извлечь Авторы, Владелец, Дата Модифицированные и Дата создания поле метаданных из каждого файла и вывод в текстовый файл.Извлечь метаданные из файлов Word и Excel?

Моя первая попытка сделать это с использованием PowerShell. The code presented by the OP here отлично работает, но не переписывает папки. Я экспериментировал с различными способами объединения «Get-ChildItem» с функцией funMetadata, но не смог этого сделать. Поскольку он не работал для OP, и не было никаких решений, предлагаемых SO-сообществом, было бы неразумно пытаться продолжить исправление этого кода. Вместо этого я сосредоточился на изменении решения OP (ниже), заменив мои собственные поля метаданных, но в текстовом файле вывода просто говорится «Авторы», за которым следует пустая страница. Вот что я пробовал:

(перейти к корневой папке): Get-ChildItem -Recurse | Select-Object Authors | Out-file "C:\text5.txt"

(Кстати, метаданные, безусловно, существует в файлах - Я знаю это, используя оригинал Ор, а не-годные к-Recurse скрипт).

Пробуя другую липкость, я загрузил два модуля python - hachoir и oletools - но как только я их установил, я не знал, с чего начать. Кажется, что нет документации.

У кого-нибудь есть совет для меня?

EDIT: Я только что нашел новую информацию here, и это, вероятно, дублирующий вопрос. Мне не нравится удалять его сейчас, хотя, если кто-то работает над ответом. Извините за любые недоразумения

ответ

1

Вы все еще можете использовать PowerShell, вам просто нужно связать все вместе, чтобы перебрать все ваши файлы.

$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) 
} 

Примечание: объект, возвращаемый Get-ChildItem не метаданные автора, поэтому при использовании Select-Object создает пустую собственность.

+0

Большое спасибо @BenH - это отлично работает! Я положил | Out-file C: \ metadata6.txt -Append после вашего "-1" ", чтобы получить текстовый файл. Однако одно нечетное: для половины извлеченных файлов метаданных «title» нет. Вы знаете, почему это может быть так? Большинство этих неименованных записей находились в подпапках. – oymonk

+0

Не знаю почему. Метод GetDetailsOf должен вытащить все непустые поля. Кроме того, если ответ сработал для вас, тогда лучше всего принять его. – BenH

+0

Большое спасибо за отличное решение. – oymonk