2011-01-25 12 views
1

私の.mp3コレクションを再編成するのに役立つ小さなスクリプトを書きました。このスクリプトを実行すると、エラー状態になるまで数千のファイルが処理されることがあります(通常、名前/パスに特殊文字が含まれていないファイルを移動してカウントしていませんでした)が、実行中のスクリプトタイムアウト

スクリプト "C:\ DevSpace \ mp3move.vbs"でスクリプト実行時間を超過しました。 スクリプトの実行が終了しました。

なぜこれが起こっているのかわかりません。この問題が発生した場所を特定するために、msgboxの行をいくつか追加しましたが、msgboxがポップアップすることがわかりましたが、それは非常に迅速に自動終了します。ここで

はコードです - 私はあなたがより高い値にWScript.Timeoutプロパティを設定する必要がありますフォーラムで正しく

'Takes all .MP3 files in the source dir, reads the Artist tag associated with that file 
'Checks for a dir named after the artist in the destination dir 
'If the folder artist/album does not exists, it will create it 
'Then move the .mp3 file to the dest dir 
Dim oAppShell, oFSO, oFolder, oFolderItems 

Dim strPath, i 

Dim sInfo 

iDebug=0 

sInfo = "Item Description" 

strPath = "K:\_preprocess" 
sDestination = "K:\Music" 


Set oAppShell = CreateObject("Shell.Application") 
Set oFSO = CreateObject("Scripting.FileSystemObject") 

If not oFSO.FolderExists(strPath) Then 

    WScript.Echo "Folder " & strPath & " is inaccessble" 

End If 

Set oFolder = oAppShell.NameSpace(strPath) 
Set oFolderItems = oFolder.Items() 

sCreate = "" 
sExist = "" 
sMoved = "" 
If (not oFolderItems is nothing) Then 
    if oFolderItems.Count = 0 then 
    Wscript.echo "no files found in this folder: " & strPath 
    WScript.Quit 
    end If 

    If iDebug = 1 Then 
    i = oFolderItems.count 
    WScript.Echo i 
    End If 

For Each oItem in oFolderItems 
    If iDebug = 1 Then 
     i = i - 1 
    End If 

    If oItem.Type = "MP3 audio file (mp3)" or oItem.Type = "MP3 Format Sound (.mp3)"_ 
    Or oItem.Type = "Windows Media Audio file" or oItem.Type = "MP3 Format Sound" then 
     'get artist name 
     sArtist = oFolder.GetDetailsOf(oItem, 20) 

     If iDebug = 1 Then 
      MsgBox oItem.name 
      MsgBox sArtist 
     End If 

     'if 'The Beatles' change to 'Beatles, the' 
     If InStr(LCase(sArtist),"the") = 1 Then 
      sArtist = Mid(sArtist,5) & ", the" 
     End If 

     'remove \ from band name 
     If InStr(sArtist,"\") > 0 Then 
      sArtist = Replace(sAlbum,"\","")   
     End If   

     If InStr(sArtist,"/") > 0 Then 
      sArtist = Replace(sAlbum,"/","")   
     End If   

     If iDebug = 1 Then 
      MsgBox sArtist 
     End If 

     'if folder does not exist create 
     'MsgBox sDestination & "\" & sArtist 
     If oFSO.FolderExists(sDestination & "\" & sArtist) Then 
      'MsgBox "EXIST" 
      sExist = sExist & sDestination & "\" & sArtist & " exists" & vbCrLf 
     Else 
      'MsgBox "CREATE " & sDestination & "\" & sArtist 
      rtn = oFSO.CreateFolder(sDestination & "\" & sArtist) 
      sCreate = sCreate & sDestination & "\" & sArtist & " created" & vbCrLf 
     End If    

     'get album name 
     sAlbum = oFolder.GetDetailsOf(oItem, 14) 

     'remove special characters from album name  
     If InStr(sAlbum,":") > 0 Then 
      sAlbum = Replace(sAlbum,":","")  
     End if 

     If InStr(sAlbum,"?") > 0 Then 
      sAlbum = Replace(sAlbum,"?","")  
     End If  

     If InStr(sAlbum,"...") > 0 Then 
      sAlbum = Replace(sAlbum,"...","")  
     End If 

     If InStr(sAlbum,"/") > 0 Then 
      sAlbum = Replace(sAlbum,"/","")  
     End If 

     If InStr(sAlbum,"\") > 0 Then 
      sAlbum = Replace(sAlbum,"\","")  
     End If 

     'create dir artist/album 
     If oFSO.FolderExists (sDestination & "\" & sArtist & "\" & sAlbum) Then 
      'sExist = sExist & sDestination & "\" & sArtist & sAlbum & " exists" & vbCrLf 
     Else 
      'MsgBox sDestination & "\" & sArtist & "\" & sAlbum 
      rtn = oFSO.CreateFolder (sDestination & "\" & sArtist & "\" & sAlbum) 
      'sCreate = sCreate & sDestination & "\" & sArtist & " created" & vbCrLf 
     End If 

     'move file 
     sSource = strPath & "\" & oItem.name & ".mp3" 
     sDest = sDestination & "\" & sArtist & "\" & sAlbum & "\" 

     If iDebug=1 Then 
      MsgBox sSource & vbCrLf & sDest 
     End If 

     If oFSO.FileExists (sSource) Then 
      oFSO.MoveFile sSource, sDest 
      'sMoved = sMoved & sSource & " moved to " & sDest & vbcrlf 
      'MsgBox smoved 
     Else 
      MsgBox sSource & " not moved" 
     End If 
    End If 

    If iDebug = 1 
     WScript.Sleep 1000 
     WScript.Echo i 
    End If 
Next 

If iDebug=1 
    WScript.Echo i 
End if 
'MsgBox sCreate 

'MsgBox sExist 

'MsgBox sMoved 

End If 

答えて

0

例を参照してください。テストに使用した.mp3ファイルの中には、タグにアスキー文字以外の文字が含まれていて、プログラムがフリーズする原因となったものがありました。

1

を書式設定を取得していないためappoligize。

は、問題は私の入力ファイルに存在していたhere

+0

私のテストでは、C:\ // T: \ // T:99999 wscript.timeout = 0(同じく99999)ですが、この問題は影響しません。 – ccwhite1

+0

私はまた、この問題が発生したときに私のシステムを再起動することができ、その後コードを変更せずに正常に動作することに気付きました。 – ccwhite1