См. Имена переменных метаданных в файлах (Windows 10) - PullRequest
0 голосов
/ 02 апреля 2020

Мне трудно определить эту проблему, но в основном я хотел бы знать, «каковы имена переменных символов c, связанных с метаданными файлов (предпочтительно при установке Windows)". Например, взяв файл .mp3, проверив его свойства, вы получите заголовок, битрейт, путь к папке и т. Д. c. описания. То, что я хочу знать, это название полей, видимых программами (то есть Title-> title, Bit Rate-> bit_rate et c.), Если это имеет смысл, так как я пытался проиндексировать некоторые файлы, и я хотел бы собрать как можно больше информации о них.

1 Ответ

1 голос
/ 02 апреля 2020

Я не уверен, что для метаданных существует такая вещь, как "символы c имена", особенно в отношении PowerShell. Я подозреваю, что Windows поддерживает определенное количество популярных форматов и предлагает функциональность через Проводник для просмотра, а иногда и редактирования. Я не нашел источника, который мог бы доказать эту теорию, но исследования неявно поддерживают ее: есть несколько десятков результатов поиска о том, как извлечь метаданные файла в PowerShell, и все они, похоже, предлагают примерно один и тот же подход (например, this сообщение в блоге ): использование объекта Shell для сбора информации.

Поскольку вы пометили эту PowerShell, вот мое мнение о том, чтобы свести ее к основам:

$path = 'C:\temp\file.txt' # pick a path
$parent = Split-Path -Parent $path # get the directory
$shell = New-Object -ComObject Shell.Application # get ourselves a shell
$folder = $shell.NameSpace($parent) # get a "folder namespace"
$file = $Folder.Items() | where { $_.Path -eq $path } # get the file itself from the folder
$count = 0 # zero our iterator
$object = New-Object PSObject # make a fresh object to hold our output
While ($folder.GetDetailsOf($folder.Items, $count) -ne "") { # iterate over the available metadata tags for the folder, and for each one get the value from the file
    $object | Add-Member -Force NoteProperty ($folder.GetDetailsOf($folder.Items, $count)) ($folder.GetDetailsOf($file, $count))
    $count += 1
}
Write-Output $object

Обратите внимание, что атрибуты, доступные для данного файла, очевидно, не являются всеми атрибутами, которые могли бы поддерживаться для любого файла, и дополнительно не обязательно являются «символами c имен». Я подозреваю, что процесс запроса объекта оболочки заставляет его проверять файлы в папке и извлекать метаданные, которые распознает Windows - он мог бы даже сделать это на основе типа представления, выбранного для папки (Фото, Музыка c) , Documents, et c.).

Что касается записи информации, это может быть возможно с помощью одного и того же объекта оболочки, но я не исследовал этот вариант. Вероятно, это зависит от указанного формата c: для mp3 вам, вероятно, нужна библиотека для просмотра / редактирования специфичных для mp3 метаданных c.

...