Тайм-аут сценария в середине выполнения - PullRequest
1 голос
/ 25 января 2011

Я написал небольшой скрипт, чтобы помочь реорганизовать мою коллекцию .mp3. Когда я запускаю этот сценарий, иногда он обрабатывает несколько тысяч файлов, пока не столкнется с ошибкой (обычно это перемещение файла, в имени / пути которого есть специальный символ, который я не учитывал), но часто выйдите из скрипта с текстом

Превышено время выполнения сценария для сценария "C: \ DevSpace \ mp3move.vbs". Выполнение скрипта было прекращено.

Я не уверен, почему это происходит. Чтобы выяснить, где это произошло, я добавил несколько строк msgbox, и обнаружил, что всплывающее окно msgbox всплывает, но затем автоматически закрывается очень быстро.

Вот код - я извиняюсь за неправильное форматирование на форуме

'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

Ответы [ 2 ]

1 голос
/ 25 января 2011

Вам следует установить для свойства WScript.Timeout более высокое значение.

См. Пример здесь

0 голосов
/ 12 февраля 2011

Проблема с моими входными файлами.Некоторые из файлов .mp3, которые я использовал для тестирования, содержали в тегах не-ascii символы, что приводило к зависанию программы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...