ONLY DO WHAT ONLY YOU CAN DO

こけたら立ちなはれ 立ったら歩きなはれ

PowerShell で iTunes にインポートする

指定したフォルダ配下の曲を一括インポート

function ImportWav($arg) 
{ 
    $args = $arg.fullName.split("\")
    # 階層構造が 一律ではない
    # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\ディスク番号\曲名.mp3
    # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\曲名.mp3
    # c:\音楽\MP3\グループ分け\アルバム名\ディスク番号\曲名.mp3
    # c:\音楽\MP3\グループ分け\アルバム名\曲名.mp3
    $hierarchy_depth = $args.length
    $playlist_offset = $hierarchy_depth - ($hierarchy_depth - 3)
    $artist_offset   = $playlist_offset + 1
    $album_offset    = $artist_offset   + 1
    $disk_offset     = $album_offset    + 1
    $track_offset    = $hierarchy_depth - 1

    $playlist_name = $args[$playlist_offset]
    $artist_name   = $args[$artist_offset]
    if ($album_offset -lt $track_offset)
    {
        # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\ディスク番号\曲名.mp3 の ケース
        # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\曲名.mp3 の ケース
        $album_name    = $args[$album_offset]
    }
    else
    {
        # c:\音楽\MP3\グループ分け\アルバム名\曲名.mp3 の ケース
        $album_name    = ""
    }
    if ($disk_offset -lt $track_offset)
    {
        # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\ディスク番号\曲名.mp3 の ケース
        $disk_name     = $args[$disk_offset]
    }
    else
    {
        # c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\曲名.mp3 の ケース
        $disk_name     = ""
    }
    if ($album_name.StartsWith("Disc") -and $disk_name -eq "")
    {
        # c:\音楽\MP3\グループ分け\ディスク番号\曲名.mp3
        $disk_name = $album_name
        $album_name = ""
    }
    if ($album_name -eq "" )
    {
        # c:\音楽\MP3\グループ分け\アルバム名\ディスク番号\曲名.mp3
        # c:\音楽\MP3\グループ分け\アルバム名\曲名.mp3
        $album_name = $artist_name
        $artist_name = "その他"
    }
    $track_name    = $disk_name, $arg.BaseName

    write-host $hierarchy_depth, ", play list = [",$playlist_name, "], artist = [", $artist_name, "], album = [", $album_name, "], track = [", $track_name, "]"

    if (($global:artist_name -ne $artist_name) -or ($global:album_name -ne $album_name))
    {
        #アーティスト名かアルバム名が変わった
        $global:truck_no = 1
    }
    else
    {
        #同一のアーティスト・アルバム
        $global:truck_no++
    }
    $playList      = $global:it.LibrarySource.Playlists.ItemByName($playlist_name)
    if ($playList -eq $null)
    {
        #未登録なら追加
        $playList = $global:it.CreatePlayList($playlist_name)
    }
    
    $global:artist_name = $artist_name
    $global:album_name  = $album_name
    $global:truck_name  = $track_name
    
    if ($arg.Extension -eq '.wav')
    {
        #wave形式なら変換
        $sts = $global:it.ConvertFile($arg.fullName)
    }
    elseif ($arg.Extension -eq '.mp3')
    {
        #mp3形式なら単に追加
        $sts = $playList.AddFile($arg.fullName)
    }
    while($sts.InProgress)
    {
        Start-Sleep 1
    }
    #タグの編集
    foreach ($track in $sts.Tracks)
    {
        $track.Artist       = $global:artist_name
        $track.Album        = $global:album_name
        $track.TrackNumber  = $global:truck_no
        $track.Name         = $global:truck_name
        if ($arg.Extension -eq '.wav')
        {
            #wave形式なら追加
            $playList.AddTrack($track)
        }
    }
}
$global:it = New-Object -ComObject iTunes.Application

$global:artist_name = ""
$global:album_name  = ""
$global:truck_name  = ""
$global:truck_no    = 0

#指定したフォルダ配下の曲を一括インポート
# c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\ディスク番号\曲名.mp3
# c:\音楽\MP3\グループ分け\アーティスト名\アルバム名\曲名.mp3
# c:\音楽\MP3\グループ分け\アルバム名\ディスク番号\曲名.mp3
# c:\音楽\MP3\グループ分け\アルバム名\曲名.mp3
# って感じで整理している
Get-ChildItem "c:\音楽\MP3" -rec |
select Fullname, Extension, Attributes, BaseName | 
where {($_.Attributes -ne 'Directory')} |
sort Fullname | 
foreach {ImportWav($_)}

$global:it.Quit