1. Computer problem? Tech Support Guy is completely free -- paid for by advertisers and donations. Click here to join today! If you're new to Tech Support Guy, we highly recommend that you visit our Guide for New Members.

Editing a VBS script

Discussion in 'Software Development' started by tommo020788, Dec 23, 2010.

Thread Status:
Not open for further replies.
  1. tommo020788

    tommo020788 Thread Starter

    Joined:
    Oct 20, 2008
    Messages:
    322
    hi, I have a VBS script here that allows me to search, and delete any registry entry with a specified keyword in it.

    At the end, it displays a message box, saying it finished, and how long it took to finish (Finished in "" minutes").

    I want it to create a text file "finished.txt" instead of displaying this message.

    How can I do this?

    Code:
    ' Script that will do a substring search in all key names
    ' for the string in the variable sKey and delete the key
    ' if the string is found.
    '
    ' You can set a key path in the variable sStartKeyPathx if
    ' you want to limit the search to a specific registry branch.
    ' Adjust callouts to sStartKeyPath1/2/3 as you see fit
    
    Const OpenAsASCII      =  0
    Const FailIfNotExist   =  0
    Const ForReading       =  1
    Const OverwriteIfExist = -1
    
    sStartKeyPath1 =  "HKEY_CURRENT_USER"
    sStartKeyPath2 =  "HKEY_LOCAL_MACHINE"
    sStartKeyPath3 =  "HKEY_USERS"
    
    sKey = "tomkey"
    
    Set oShell = CreateObject("WScript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    ' get a temporary registry file name
    sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName
    
    sStart = Now
    ExportRegistry sStartKeyPath1, sTempFile
    CreateAndRunRegistryFile sKey, sTempFile
    
    ExportRegistry sStartKeyPath2, sTempFile
    CreateAndRunRegistryFile sKey, sTempFile
    
    ExportRegistry sStartKeyPath3, sTempFile
    CreateAndRunRegistryFile sKey, sTempFile
    
    ' delete temp file
    If oFSO.FileExists(sTempFile) Then
      oFSO.DeleteFile sTempFile
    End If
    
    MsgBox "Finished in " & DateDiff("n", sStart, Now) & " minutes", _
            vbSystemModal, "SearchAndDelete" 
    
    Sub ExportRegistry(sStartKey, sFile)
      If Trim(sKey) = "" Then
        ' export the complete registry
        sCmd = "regedit.exe /S /E:A """ & sFile & """"
      Else
        ' export the registry key to a file
        sCmd = "regedit.exe /S /E:A """ & sFile & """ " & """" & sStartKey & """"
      End If
      oShell.Run sCmd, 0, True
    End Sub
    
    Sub CreateAndRunRegistryFile(sString, sInFile)
    
      sOutFile = oFSO.GetSpecialFolder(2).ShortPath & "\" & oFSO.GetTempName
    
      ' find all string starting with [ and ends with ], and that
      ' also contains at least one bachslash in addition to the
      ' text in the variable sString
      sCmd = "%comspec% /c findstr.exe " _
           & "/i /r ""^\[.*\\.*" & sString & ".*\]$"" """ _
           & sInFile & """ >""" & sOutFile & """"
    
      oShell.Run sCmd, 0, True
    
      Set fFile = oFSO.OpenTextFile(sOutFile, ForReading, _
                                        FailIfNotExist, OpenAsASCII)
    
      sResult = ""
      On Error Resume Next
      sResult = fFile.ReadAll
      fFile.Close
      oFSO.DeleteFile sOutFile
      On Error Goto 0
    
      If sResult <> "" Then
    
        Set fRegFile = oFSO.CreateTextFile(sOutFile, _
                        OverwriteIfExist, OpenAsASCII)
        fRegFile.WriteLine "REGEDIT4" & vbCrLf
    
        aResult = Split(sResult, vbCrLf)
    
        For i = 0 To UBound(aResult)
    
          sLine = aResult(i)
    
          ' do the same tests as the regexp in findstr just in case.
          If InStr(1, sLine, sString, vbTextCompare) > 0 _
                      And Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then
    
          sLine = "[-" & Mid(sLine, 2)
            fRegFile.WriteLine sLine
          End If
        Next
    
        fRegFile.WriteLine vbCrLf   ' add two blank lines at the end
        fRegFile.Close
        sCmd = "regedit.exe /s """ & sOutFile & """"
        oShell.Run sCmd, 0, True
    
      End If
    
      If oFSO.FileExists(sOutFile) Then
        oFSO.DeleteFile sOutFile
      End If
    
    End Sub 
     
  2. centauricw

    centauricw

    Joined:
    Jun 26, 2010
    Messages:
    444
    Simple. Just create a new text file named "finished.txt" and write the same output you did to the Message Box to the text file. You're already using the FileSystemObject, so this should be a simple change.
     
As Seen On
As Seen On...

Welcome to Tech Support Guy!

Are you looking for the solution to your computer problem? Join our site today to ask your question. This site is completely free -- paid for by advertisers and donations.

If you're not already familiar with forums, watch our Welcome Guide to get started.

Join over 733,556 other people just like you!

Thread Status:
Not open for further replies.

Short URL to this thread: https://techguy.org/970162

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice