環境
windows10 ver 1709
powershell ver 5.1
内容
以下では、
1. パッケージマネージャ(NuGet)のインストール
2. Nugetを利用しパッケージ(taglib)をインストール
3. taglibに含まれるライブラリ(taglib-sharp.dll)をロード
4. taglib-sharp.dllを利用し、wavファイルの曲名を変更
を行います。
(以下、一部記憶を頼りに記載したため、誤っている可能性があります。)
事前準備(インストールなど)
管理者権限でpowershellを開く
NuGetの追加
PS C:\WINDOWS\system32> Install-Package nuget
The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
Name Version Source Summary
---- ------- ------ -------
NuGet 1.3.3 PSGallery Create Nuget repos, Register Repos, Manage Modules ...
パッケージの取得元を追加
PS C:\WINDOWS\system32> Register-PackageSource -Name "NugetSource" -Location "https://www.nuget.org/api/v2" -ProviderName nuget
Name ProviderName IsTrusted Location
---- ------------ --------- --------
NugetSource NuGet False https://www.nuget.org/api/v2
パッケージの取得元が追加されていることを確認
PS C:\WINDOWS\system32> Get-PackageSource
Name ProviderName IsTrusted Location
---- ------------ --------- --------
NugetSource NuGet False https://www.nuget.org/api/v2
PSGallery PowerShellGet False https://www.powershellgallery.com/api/v2
taglibのインストール
PS C:\WINDOWS\system32> Install-Package taglib
taglibがインストールされていることを確認
PS C:\WINDOWS\system32> Get-Package -Name taglib
Name Version Source ProviderName
---- ------- ------ ------------
taglib 2.1.0.0 C:\Program Files\PackageManag... NuGet
事前準備(ライブラリのロードなど)
パッケージのパスから、ライブラリファイル(taglib-sharp.dll)の絶対パスを$taglibPathに格納。また、同時にライブラリファイルの存在を確認。
PS C:\WINDOWS\system32> Get-Package -Name taglib | % { split-path $_.source -parent | join-path -childpath "\lib\taglib-sharp.dll" | Tee-Object -Variable taglibPath| test-path}
True
taglib-sharp.dllをロード
PS C:\WINDOWS\system32> [Reflection.Assembly]::LoadFrom($taglibpath)
GAC Version Location
--- ------- --------
False v2.0.50727 C:\Program Files\PackageManagement\NuGet\Packages\taglib.2.1.0.0\lib\taglib-sharp.dll
タイトルの変更
wavファイルを格納したフォルダに移動
略
ファイル名から先頭3文字を削除した文字列を、曲名(Title)に設定する。
以下のようにファイル名から曲名を取得。
ファイル名 "NN Title.wav"
↓
曲名 "Title"
PS G:\_tmp\renameTitle> Get-ChildItem -Filter *.wav |
>> ForEach-Object {
>> $wavFile=[TagLib.File]::Create($_.FullName);
>> $wavFile.Tag.Title=$_.name.Substring(3,$_.name.Length - 7);
>> $wavFile.Save();
>> }
疑問
インストールしたパッケージに含まれるライブラリのロードは、
もっとよい方法がありそうな気がするが。。。?
参考にしたURL
github powershell-taglib
Stack Overflow Access Music File Metadata in Powershell [closed]
【Powershell】Powershellでの左からxx文字目、右からxx文字目の文字列を取得する
Join-Paht
Tee-Object