フォルダの名前変更では更新日時が変更されずスルーしてしまったり、
曲ファイルを削除しただけではフォルダの更新日時が変更されずスルーされたりと、
なかなかうまいこといかない。(削除だとファイルの更新日時もチェックできない。当然だが)
プレイリストの中身を見てファイルがちゃんと存在するかチェックしてやる必要があるのかもしれないが、
いまですら結構処理時間がかかってるだけに踏ん切りがつかないのが現状だ。
本体の起動時にプレイリストをチェックしている節がみられるが、
特にプレイリスト事体編集しているわけではないようだ。
m3uをみてファイルの有無をチェックするプログラムを作ってもいいのかもしれない。
できた。
画像ではIkaruga.m3uの10行目に記述されたパスが存在していない。
https://skydrive.live.com/redir.aspx?cid=8cd7cf5ea9fbca55&resid=8CD7CF5EA9FBCA55!386&parid=8CD7CF5EA9FBCA55!138&authkey=!ADW8M0BZY_1qdTA
CheckPlayList.vbs
size: 2KB
■概要
ZenStyleM100内のプレイリストに記述されている曲ファイルの有無をチェックする
■使い方
お使いのZenStyleM100、あるは親類のルートフォルダに
ダウンロードしたCheckPlayList.vbsを置いて実行してください。
あるいはファイル内のplayListDirをプレイリストのフォルダパスに書き換えて実行してください。
Zen Style M100ではプレイリスト内のパスを
\dir\dir\file.mp3
といったようにドライブ名を除去して記述するので、
チェックの際はドライブ名を付けてからファイルの有無確認をする必要があるぐらい。
' 指定フォルダ内のm3uファイルに記述されたファイルパスをチェック。 ' ファイルが存在しなければ、行数と記述内容を出力する ' ただしZenStyleM100などのドライブ名のないパスを使用したプレイリストに限定 ' auther sumishiro@gmail.com Option Explicit Dim playListDir playListDir = ".\PlayList" Dim fso Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' 指定m3uファイルをチェック。存在しないファイルがあれば標準出力 Sub checkPlayList( fileObj ) Dim file Set file = fso.OpenTextFile( fileObj, 1, False, -1 ) Dim outputStr outputStr = "" Dim lineNo lineNo = 1 Do Until file.AtEndOfStream=True Dim strLine strLine = file.ReadLine() If fso.FileExists(fileObj.Drive & strLine)=False Then outputStr = outputStr & "(" & lineNo & ") " & strLine & vbNewLine End If lineNo = lineNo + 1 Loop file.Close() ' エラーがあればファイル名と行数、行内容などの情報を出力 If Len(outputStr)>0 Then outputStr = "[" & fileObj & "]" & vbNewLine & outputStr WScript.Echo outputStr End If End Sub ' 指定フォルダ以下を走査。m3uがあればチェック Sub searchDir( dir ) Dim subDir For Each subDir In dir.SubFolders Call searchDir( subDir ) Next Dim file For Each file In dir.Files Dim ext ext = LCase( fso.GetExtensionName(file) ) If ext="m3u" Then Call checkPlayList( file ) End If Next End Sub Call searchDir( fso.GetFolder(playListDir) )
0 件のコメント:
コメントを投稿