フォルダの名前変更では更新日時が変更されずスルーしてしまったり、
曲ファイルを削除しただけではフォルダの更新日時が変更されずスルーされたりと、
なかなかうまいこといかない。(削除だとファイルの更新日時もチェックできない。当然だが)
プレイリストの中身を見てファイルがちゃんと存在するかチェックしてやる必要があるのかもしれないが、
いまですら結構処理時間がかかってるだけに踏ん切りがつかないのが現状だ。
本体の起動時にプレイリストをチェックしている節がみられるが、
特にプレイリスト事体編集しているわけではないようだ。
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 件のコメント:
コメントを投稿