2012年3月24日土曜日

日記ちゃんCheckPlayList

変更のあったものだけプレイリストの書き換えを行うよう修正しようと思ったのだけど、
フォルダの名前変更では更新日時が変更されずスルーしてしまったり、
曲ファイルを削除しただけではフォルダの更新日時が変更されずスルーされたりと、
なかなかうまいこといかない。(削除だとファイルの更新日時もチェックできない。当然だが)
プレイリストの中身を見てファイルがちゃんと存在するかチェックしてやる必要があるのかもしれないが、
いまですら結構処理時間がかかってるだけに踏ん切りがつかないのが現状だ。

本体の起動時にプレイリストをチェックしている節がみられるが、
特にプレイリスト事体編集しているわけではないようだ。
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 件のコメント: