Logger.vbs

'=========================================================================
' Logger.vbs
' VERSION: 1.0
' AUTHOR: Brian Steinmeyer
' EMAIL: [email protected]
' WEB: https://sigkillit.com
' DATE: 1/1/2011
' COMMENTS: Pass the Log Name, Message, and Whether It's a New Log File
' to the Sub and It will Create or Append the Specified Log File in the Current
' Directory. The Log Name Can Be a Full Directory Path, or Just the File Name
' To Create It in the Current Directory. This Sub is Useful When You Need to
' Create Multiple Output Files and Use Multiple Subs/Functions.
' EXAMPLE: Call Logger("Test.txt", "Test Message", True)
'          Call Logger("C:\Full\Path\test.txt", "Test Message", True)
'          Call Logger("C:\Full\Path\test.txt", "Call 2", False)
'          Call Logger("C:\Full\Path\test.txt", "Call 3" & vbCrLf & "Line 4", False)
'          Call Logger("Test.txt", "Test Message2", False)
'=========================================================================
Option Explicit

Call Logger("Test.txt", "Test Message", True)
Call Logger("C:\Full\Path\test.txt", "Test Message", True)
Call Logger("C:\Full\Path\test.txt", "Call 2", False)
Call Logger("C:\Full\Path\test.txt", "Call 3" & vbCrLf & "Line 4", False)
Call Logger("Test.txt", "Test Message2", False)
Wscript.Echo "Finished"

Private Sub Logger(fileName, logMessage, blnNewLog)

    On Error Resume Next

    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")
    Dim scriptPath: scriptPath = Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\"))
    Dim logName
    If InStr(1,fileName,"\",1) > 0 Then
        logName = fileName
        If objFSO.DriveExists(objFSO.GetDriveName(logName)) Then
            If StrComp(objFSO.GetExtensionName(logName), "", 1) = 0 Then
                If Not objFSO.FolderExists(logName) Then
                    If objFSO.FolderExists(objFSO.GetParentFolderName(logName)) Then
                        objFSO.CreateFolder logName 'Create Folder In Current Path
                        Exit Sub
                    Else
                        Call Logger(objFSO.GetParentFolderName(logName), logMessage, blnNewLog) 'Recurse Creating Parent Folder
                        Call Logger(logName, logMessage, blnNewLog) 'Recurse Creating Current Folder
                        Exit Sub
                    End If
                End If
            Else
                If Not objFSO.FileExists(logName) Then
                    If Not objFSO.FolderExists(objFSO.GetParentFolderName(logName)) Then
                        Call Logger(objFSO.GetParentFolderName(logName), logMessage, blnNewLog)  'Recurse Creating Parent Folder
                        Call Logger(logName, logMessage, blnNewLog)  'Recurse Creating Current Folder
                    End If
                End If
            End If
        End If
    Else
        logName = scriptPath & fileName
    End If
    Dim logFile
    If blnNewLog = True Then
        Set logFile = objFSO.CreateTextFile(logName, True)
    Else
        If objFSO.FileExists(logName) Then
            Set logFile = objFSO.OpenTextFile(logName, ForAppending, True)
        Else
            Set logFile = objFSO.CreateTextFile(logName, True)
        End If
    End If
    logFile.WriteLine logMessage
    logFile.Close
    Set objFSO = Nothing

    On Error Goto 0

End Sub