July, 2011

  • Touching every file in every subdirectory

    A friend recently asked me how to touch every file in a folder and subfolders.  Let's say he has an executible called "dosomething.exe" and wants to run that program against every file in the parent folder and subfolders.  Here's a quick script to do such a thing.  There's not much to the VBScript but I am posting because I know what it is like to be out in the field and need something quickly.  While this can be done multiple ways, I wrote this in VBScript because I did not know the client OS version and only had notepad handy at the time.  :)

     

    On Error Resume Next          ' Ignore errors such as access denied
    Dim ObjShell, objFSO, objFolder, objStartFolder
    Dim colFiles

    Set ObjShell = CreateObject("WScript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(objStartFolder)
    Set colFiles = objFolder.Files

    objStartFolder = "C:\jingalls"     ' This is the parent directory

    For Each objFile in colFiles
    Next

    ShowSubfolders objFSO.GetFolder(objStartFolder)

    Sub ShowSubFolders(Folder)
        For Each Subfolder in Folder.SubFolders
            Set objFolder = objFSO.GetFolder(Subfolder.Path)
            Set colFiles = objFolder.Files
            For Each objFile in colFiles
                wscript.echo Subfolder.Path & "\" & objFile.Name
     set objWshScriptExec = objShell.Exec("%COMSPEC% /c c:\utils\dosomething.exe " & Subfolder.Path & "\" & objFile.Name)
     Set objStdOut = objWshScriptExec.StdOut
     strOutput = objStdOut.ReadAll
      WScript.Echo strOutput
            Next
            ShowSubFolders Subfolder
        Next
    End Sub

    Set objShell = Nothing
    Set objFSO = Nothing
    set objFolder = Nothing
    set objStartFolder = Nothing
    set colFiles = Nothing

  • Goals

    There are three types of blogs: useful, interesting/entertaining, and other which is usually the opposite of both.  The goal of this blog is to be in bucket #1 and bucket #2.  More to come...