Win [ALPHA] Sport Games Renamer - Real simple
#1
Hi All

I have just finished (well finished enough for testing) a VBS tool I designed to my specific requirements and thought why not share it with everyone in case its useful to someone.

This is raw, I haven't live tested it on actual video files but it runs as expected on made up files.

Description:
A simple file renaming tool that will work on any 3 character extension files (mkv, avi, mp4, txt, etc). Renaming and moving them to a specific location and naming format.

How It Works:
I designed it to specifically rename NBA games that I watch in XBMC when I have the chance, these come in random naming formats and me being a bit of a neat freak spent time renaming to a specific way. What this tool does is extract the date from a file name, and the teams and then renames and moves the files to my XBMC folder for NBA games.

It works by splitting the files name according to periods "." and then examines each element between the "." for Year/Month/Date/Teams/Extension, it then rearranges them to my liking and moves them off to the correct folder, it also catches files it can't rename and moves them to a folder (that I will check regulary to manually fix), it also catches files that will end up duplicately named, and moves the original file to the same folder (as back up / for me to check).

It records everything it does into a txt log file, for debugging, fixing naming errors etc.

Examples:
[email protected] will become: NBA - 2013.11.05 - [email protected] (and be moved to my NBA XBMC folder)
[email protected] will become will become: NBA - 2013.11.05 - [email protected]

Etc

Conditions on it working:
Elements must be separated by periods "." (I will work on expanding this later)
It must have a Year a Month and a Date in numbers, the month and year also work of the current month and year (it was built for sports) (again I will work on expanding this so its more dynamic)
It must have teams separated by "@" symbol (again I will be working to expand)

Its very Alpha and limited at the moment, but I hope to expand it quite a bit to cover off more situations.

I personally plan to use this automatically as a scheduled task.


How To Use:

Open a new blank txt file. Then copy all of this code below into the txt file:

Code:
On Error Resume Next
Set ObjFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = ObjFSO.GetFolder("C:\Users\tbaker\Documents\NBA\") 'CHANGE THIS PATH TO THE PATH WHERE YOUR FILES WILL ORIGINALLY BE LOCATED AKA SOURCE FOLDER
desFolder = "C:\Users\tbaker\Documents\WIP\" 'CHANGE THIS PATH TO THE PATH WHERE YOU WOULD LIKE THE RENAMED FILES TO GO
outFile = "C:\Users\tbaker\Documents\WIP\NBA Namer Log.txt" 'CHANGE THIS PATH TO THE PATH TO YOUR LOGGING TEXT FILE (YOU NEED TO CREATE THIS)
invalidFolder = "C:\Users\tbaker\Documents\WIP\Invalid\" 'NEED TO CHANGE THIS PATH TO WHERE YOU WOULD LIKE THE INVALID FILES TO GO IF RENAMING IS UNSUCESSFUL

If Err.Number <> 0 Then
    Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
    objFile.WriteLine Date & " " & Time & " - ERROR - " & Err.Number & " - " & Err.Description & " - In Line 9 to 13, In assigning desfolder / source folder - END" & vbCrLf
    objFile.Close
    WScript.Quit
End If

If objFolder.Files.Count = 0 Then
    Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
    objFile.WriteLine Date & " " & Time & " - No Files To Process - END" & vbCrLf
    objFile.Close
    WScript.Quit
End If

Set colFiles = objFolder.Files
For Each objFile In colFiles
    filename = objFile.Name
    fileExt = Right(filename,3)
    
    FileNameArr = Split(filename,".")
    If Err.Number <> 0 Then
        Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
        objFile.WriteLine Date & " " & Time & " - ERROR - " & Err.Number & " - " & Err.Description & " - On File: " & filename & " - In Line 23 to 26, In assigning filename/fileExt and splitting filename - END" & vbCrLf
        objFile.Close
        WScript.Quit
    End If
    
    Dim curYear
    Dim curMonth
    curYear = Year(Date)
    curMonth = Month(Date)
    
    For i = LBound(FileNameArr) To UBound(FileNameArr)
        If IsNumeric(FileNameArr(i)) Then
            If CInt(FileNameArr(i)) = curYear Then
                strYear = FileNameArr(i)
            Else
                If CInt(FileNameArr(i)) = curMonth Then
                    strMonth = FileNameArr(i)
                Else
                    If CInt(FileNameArr(i)) = curMonth - 1 Then
                        strMonth = FileNameArr(i)
                    Else
                        If Len(FileNameArr(i)) = 2 Then
                            strDate = FileNameArr(i)
                        Else
                        End If
                    End If
                End If
            End If    
        Else
            If InStr(1,FileNameArr(i),"@") > 0 Then
                strTeams = FileNameArr(i)
            Else
            End If
        End If
        
        If Err.Number <> 0 Then
            Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
            objFile.WriteLine Date & " " & Time & " - ERROR - " & Err.Number & " - " & Err.Description & " - On File: " & filename & " - In Lines 40 to 68, defining Year/Month/Date/Teams" & " - END" & vbCrLf
            objFile.Close
            WScript.Quit
        End If
    Next
    
    NoVar = 0
    If strYear = "" Then
        NoVar = NoVar + 1
    Else
    End If
    
    If strMonth = "" Then
        NoVar = NoVar + 1
    Else
    End If
    
    If strDate = "" Then
        NoVar = NoVar + 1
    Else
    End If
    
    If strTeams = "" Then
        NoVar = NoVar + 1
    Else
    End If
    
    If NoVar > 0 Then
        objFSO.MoveFile objFile, invalidFolder & objFile.Name
    
        Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
        objFile.WriteLine Date & " " & Time & " - INVALID NAME - Original FileName: " & filename & " - Missing variables (either Year, Month, Date or Teams) - File Moved To Invalid Name Folder - END" & vbCrLf
        objFile.Close
    Else    
        NewFileName = "NBA - " & strYear & "." & strMonth & "." & strDate & " - " & strTeams & "." & fileExt 'NEED TO RENAME THE THINGS IN "" TO WHAT YOU WANT THEM TO BE, YOU CAN ALSO REORDER NAME ITEMS AS LONG AS fileExt IS LAST

        Exists = 0
        objFSO.MoveFile objFile, desFolder & NewFileName
        If Err.Number <> 0 Then
            If Err.Number = 58 Then
                objFSO.MoveFile objFile, invalidFolder & objFile.Name
                        
                Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
                objFile.WriteLine Date & " " & Time & " - INVALID ACTION - " & Err.Number & " - " & Err.Description & " - On File: " & filename & " - File already exists, moved to Invalid folder - END" & vbCrLf
                objFile.Close
                
                Exists = 1
            Else
                Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
                objFile.WriteLine Date & " " & Time & " - ERROR - " & Err.Number & " - " & Err.Description & " - On File: " & filename & " - Line 105, Moving / Renaming file - END" & vbCrLf
                objFile.Close
                WScript.Quit
            End If    
        End If    
        
        If Exists = 0 Then
            Set objFile = objFSO.OpenTextFile(outFile,8,True,0)
            objFile.WriteLine Date & " " & Time & " - File Renamed - Original FileName: " & filename & " - Renamed To: " & NewFileName & " - Moved To NBA Folder - END"  & vbCrLf
            objFile.Close
        Else
        End If
        
        filename = ""
        fileExt = ""
        strYear = ""
        strMonth = ""
        strDate = ""
        strTeams = ""
        NewFileName = ""
    End If
Next

Find this part (near the top)

Code:
Set objFolder = ObjFSO.GetFolder("C:\Users\tbaker\Documents\NBA\") 'CHANGE THIS PATH TO THE PATH WHERE YOUR FILES WILL ORIGINALLY BE LOCATED AKA SOURCE FOLDER
desFolder = "C:\Users\tbaker\Documents\WIP\" 'CHANGE THIS PATH TO THE PATH WHERE YOU WOULD LIKE THE RENAMED FILES TO GO
outFile = "C:\Users\tbaker\Documents\WIP\NBA Namer Log.txt" 'CHANGE THIS PATH TO THE PATH TO YOUR LOGGING TEXT FILE (YOU NEED TO CREATE THIS)
invalidFolder = "C:\Users\tbaker\Documents\WIP\Invalid\" 'NEED TO CHANGE THIS PATH TO WHERE YOU WOULD LIKE THE INVALID FILES TO GO IF RENAMING IS UNSUCESSFUL

You need to replace all the files paths to ones that you actually use/have created Smile they can go where ever you want, but I suggest making the desFolder the folder XBMC will see.

Save the text file. In windows right click the text file and rename it giving it a ".vbs" file extension.

Its done and it should be ready to roll.

If you want to mess with the naming format (for example to remove "NBA") the code is located near the bottom and I have notes next to in in CAPTIALS.

Let me know if you have any issues with it, for now I recommend making sure there is only the files you want to rename in the source folder.

Its quite simple at the moment, I'm hoping to develop it a bit more, but I might not as it should suit my needs perfectly as is haha and I might not have the time.

Any improvements are welcome Smile

Cheers
Reply

Logout Mark Read Team Forum Stats Members Help
[ALPHA] Sport Games Renamer - Real simple0