iTunesスクリプト 曲をライブラリ上からだけでなく、ファイル自体も削除

これは何?

iTunes上でファイルを削除した場合、ライブラリ上から曲が削除されますが、実際のファイルは残ったままです。そこで指定した曲をライブラリ上からだけでなく、ファイル自体も削除してくれるスクリプトを書いてみました。ちなみにWindows版のiTunesでしか使えません。

使いかた

プレイリストを作成して「削除するファイル」という名前にしてください。そして削除したい曲をこのプレイリストに入れてください。これで準備完了です。スクリプトを実行しましょう。最後に何件のファイルを削除したのか表示されます。

スクリプトの実行方法

iTunesを起動する。下記のコードをテキストとして保存。拡張子を(.js)に変更する。変更できたらこのファイルをクリックして実行します。このとき Windows Based Script Hostというプログラムで実行されるはずです。もしテキストエディタで実行されるようであれば、ファイルを右クリックしてプログラムから開くで、 Windows Based Script Host(C:\Windows\System32\wscript.exe)で実行されるように関連付けてください。

スクリプト

/*
 * あるプレイリストに含まれる曲をライブラリ上から削除するだけでなく、ファイル自体も削除します
 */

var iTunesApp = new ActiveXObject("iTunes.Application");
var playlist = iTunesApp.LibrarySource.Playlists.ItemByName("削除するファイル");//対象となるプレイリストの名前
var f = WScript.CreateObject("Scripting.FileSystemObject");

if (playlist) {
	var numTracks = playlist.Tracks.Count;//プレイリスト中の曲数
	var track;
	var count = 0;	
	while( playlist.Tracks.Count > 0){ //一曲でも残ってたらループ
		track = playlist.Tracks(1);
		
		deleteFile(track);//指定した曲のファイル自体を削除
		removeFromLibrary(track); //ライブラリから削除
		
		count++;
	}
	WScript.Echo(count + "件削除しました。");
}

/*
 * 指定した曲のファイルを削除
 */
function deleteFile(target){//引数はIITFileOrCDTrack
	if(target.Location != "") f.DeleteFile(target.Location);
}

/*
 * 指定した曲をライブラリから削除 
 */
function removeFromLibrary(target){
	//指定した曲をライブラリから探す必要がある
	//まずはライブラリからtargetの曲と同じ曲名を検索
	if(target && target.Name != ""){
		var	trackCollection = iTunesApp.LibraryPlaylist.Search(target.Name,0); //return IITTrackCollection
	
		var	count = trackCollection.Count;
		while (count != 0){
			var track = trackCollection.Item(count);
			//ファイルパスが同じなら、指定した曲と同じ曲
			if(target.Location == track.Location){
				track.Delete(); //削除
				return;
			}		
			count--;
		}
		return 0;
	}
}

スクリプトについての説明

ファイルの削除方法についてはhttp://www.jfast.net/~saikawa/wsh/file.html#delを参考にさせていただきました。ライブラリから曲を取り除く操作については、以前書いたエントリを参考に。

追記 2010/1/17

まとめ記事を書きました
iTunesスクリプト関連の記事まとめ