2008年04月19日

M3U形式プレイリストを作るWSHスクリプト

テキストエディタで編集できるプレイリストというのは便利だな。ということで、フォルダを放り込んだらそこにある音楽ファイルのリストを作るスクリプトを作ってみた。

選択したファイルやフォルダ内に含まれる音楽ファイルのリストを作ってくれる。曲順が気に入らなければ、メモ帳なんかで開いて、切り取り・貼り付けで動かせばいい。要らない曲は削除すればいい。


免責事項。私takayanは、このプログラムによって生じる一切の不具合、影響などに関する損害は一切感知しません。 それに同意いただいた方のみご利用ください。改変自由です。

↓↓↓ダウンロード
playlistup.zip ver.1.0.1
※冗長なところをちょと修正

解凍ソフトを使って適当な場所で解凍すると二つのWSHのスクリプトが入っている。playlistup.wsfはプレイリストを作るスクリプト本体。sendto.wsfは「送る」メニューに「簡易プレイリストの作成」を登録するもの。WindowsXPでのみ動作確認をしている。

いつものように「送る」メニューに登録して使う。フォルダが一つだけだとその中にプレイリストを作る。ファイルが一つだけか複数のファイルやフォルダのときはプレイリストをそれが置いてあるところに作る。プレイリスト内のファイルは相対パスで表記される。フォルダの中は再帰的に検索される。ファイルは名前順で並べ替えてある。

プレイリストのファイル名はそれが作られるフォルダ名に".m3u"が付いたものになる。既に同じ名前のファイルがあるときは上書きされる。

音楽ファイルかどうかは拡張子だけで判断している。どの拡張子を音楽ファイルと見なすかは、最初の方に宣言している変数extensionsに記述してある。

プレイリストを作る機能はそれぞれのミュージックプレイヤーについていて、マウスで簡単に順序を入れ替えたりできるから、それがちゃんと使いこなせる人にとってはこのスクリプトは不要だと思う。




<job id="playlistup"><script language="JScript">
var extensions = "wav|mp3|wma";
var fs = WScript.CreateObject('Scripting.FileSystemObject');
var args = WScript.Arguments;
if ( args.length == 0 ){
WScript.Echo( 'パラメータがないので終了します' );
WScript.Quit();
}

function filelist( full, path ) {
var list = new Array();
if ( fs.FolderExists( full ) ) {
var folder = fs.GetFolder( full );
var files = new Enumerator( folder.files );
var name = fs.GetFileName( full );
for ( ; !files.atEnd(); files.moveNext() ){
list.push( fs.BuildPath( path,
fs.BuildPath( name, fs.GetFileName( files.item() ) ) ) );
}
var folders = new Enumerator( folder.SubFolders );
for ( ; !folders.atEnd(); folders.moveNext() ) {
list = list.concat(
filelist( folders.item(), fs.BuildPath( path, name ) ) );
}
} else if ( fs.FileExists( full ) ) {
list.push( fs.BuildPath( path, fs.GetFileName( full ) ) );
}
return list;
}

var list = new Array();
var m3ufile;
var args0 = args(0);
if ( args.length == 1 && fs.FolderExists( args0 ) ) {
m3ufile = fs.BuildPath( args0, fs.GetBaseName( args0 ) + ".m3u" );
var folder = fs.GetFolder( args0 );
var files = new Enumerator( folder.files );
for ( ; !files.atEnd(); files.moveNext() ){
list.push( fs.GetFileName( files.item() ) );
}
var folders = new Enumerator( folder.SubFolders );
for ( ; !folders.atEnd(); folders.moveNext() ) {
list = list.concat( filelist( folders.item(), "" ) );
}
} else {
var parent = fs.GetParentFolderName( args0 );
m3ufile = fs.BuildPath( parent, fs.GetBaseName( parent ) + ".m3u" );
for ( var i = 0; i<args.length; i++ ) {
list = list.concat( filelist( fs.GetAbsolutePathName( args(i) ), "" ) );
}
}
list = list.sort();

var re = new RegExp( "\.(" + extensions + ")$", "i" );
var music = new Array();
var data;
while ( data = list.shift() ) {
if ( re.test(data) ) {
music.push( data );
}
}
if ( music.length ) {
var f = fs.CreateTextFile( m3ufile, true );
var data;
while ( data = music.shift() ) {
// WScript.Echo( data );
f.WriteLine( data );
}
f.Close();
WScript.Echo( "プレイリスト「", fs.GetFileName(m3ufile), "」を",
fs.GetParentFolderName(m3ufile), "に作成しました" );
} else {
WScript.Echo( "音楽ファイルはありませんでした" );
}
</script></job>


posted by takayan at 02:32 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック