PowerShellでファイルの詳細プロパティを弄る

ファイルの プロパティ→詳細タブで出てくるこの辺の情報のことですね。

メタデータとも言われます。

背景

適当に動画ファイルを録画して、ファイル名を番組名+サブタイトル+日時+放送局+エンコード方式etc…で設定していると、こんな感じでファイル名が凄いことになっていきます。

そして、ファイル名が長すぎると、保存出来ないなど、ファイルシステムでの管理上の問題が起きてくる。単に保存出来ないならまだしも、異なるファイルシステム間でコピーに失敗するなど、後になって問題が発覚することも。

NTFS→ext4にコピーしようとして失敗した例

具体的な制限については今回は本題ではないので、別の機会に。

涙とともに、夜な夜なパンをかじった。: ファイル名の最大長を求める。UTF-8におけるNTFSとEXT4の運用 ちょっぴりZFS

本題

そんなわけで、メタデータに一部の情報を移して、ファイル名のスリム化を図ることを考えます。

適当に情報を捨ててしまっても良いのですが、なるべくなら残しておいて、後で検索とかで引っかけられるようにしたい。

Powershellでプロパティ情報の参照

こっちは調べたらすぐに情報が出てきました。

Powershell とりあえずファイルのプロパティを全部出してみるスクリプト #PowerShell – Qiita

PowerShell:ファイルのプロパティを全出力

PowerShellでプロパティ情報の編集

で、編集する方はさっぱり情報が見当たらず。。

  • PowerPointを開いて編集→再保存

【PowerShell】PowerPintのプロパティのタイトルを一括で変更する – 独り言

ただこれだとPowerPointに関連したファイルしか使えないので、別の方法を考えます。

  • taglibsharpというライブラリを使用

このライブラリを追加すると、オーディオファイルの編集は出来るという記事。

Update a song metadata with taglib-sharp and Powershell – Stack Overflow

これは上手くいきました。オーディオもビデオも、一部のメタデータは共通しているようで、その部分はこれで編集してもきちんと反映されました。

  • APIを追加して呼び出す

windows – PowerShell – Changing MP4 Metadata (Right Click Properties) – Stack Overflow

一番答えに近い。

$path = "D:\Temp\111.mp4"Add-Type -Path "D:\Temp\Microsoft.WindowsAPICodePack.Shell.dll"$shellFile = [Microsoft.WindowsAPICodePack.Shell.ShellFile]::FromFilePath($path)
$propertyWriter = $shellFile.Properties.GetPropertyWriter()
$titlePropertyKey = [Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey]::new([Guid]::new("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}"), 2)
$subtitlePropertyKey = [Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey]::new([Guid]::new("{56A3372E-CE9C-11D2-9F0E-006097C686F6}"), 38)
$propertyWriter.WriteProperty($titlePropertyKey, "New Title")
$propertyWriter.WriteProperty($subtitlePropertyKey, "New sub Title")
$propertyWriter.Close()

再掲ですが、↑の通りプロパティを設定すると、タイトルとサブタイトルにこんな感じで表示されます。

プロパティにはGUIDとIDが設定されていて、それを指定することで編集可能。

タイトルだったら
GUID: {F29F85E0-4FF9-1068-AB91-08002B27B3D9}
ID: 2
となります。

しかしこれの対応が分からずまた苦労しました。

[MS-WSP]: Common Open Properties | Microsoft Learn

ここの “Full property table” の項にそれっぽい一覧はあるのですが、
表記が微妙に違っていて、どれがどの項目に相当するのかはっきりせず。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です