A coworker of mine needed some way to get a list of all files in a directory (and its subdirectories) in a delimited text file. Specifically, they needed a pipe-delimited text file with the following fields:
- folder path (the absolute path to the folder containing the file)
- modified date
- modified time
- size, in bytes
- file name
The solution was a VBScript using Windows Scripting technologies. It’s rather simple, utilizing the Scripting.FileSystemObject object. We retrieve the current directory using the GetFolder() function, which returns a Folders collection (i.e., a collection of Folder objects). This object is passed as a parameter to the ParseFolder() function in our script.
The ParseFolder() function gets the data from each File object in its Files collection and outputs it to a pipe-delimited text file (called diraudit.txt. It then calls itself (a recursive function) for each Folder object in its Folders collection. The recursion takes care of all the subsequent subfolders.
The actual code of the script, which I named diraudit.vbs, follows.
Option Explicit Const ForWriting = 2 Sub ParseFolder ( objFolder ) Dim objFiles, f Set objFiles = objFolder.Files For Each f In objFiles objOutputFile.WriteLine Mid( f.Path, 1, InStr( f.Path, f.Name ) - 1 ) & "|" & _ FormatDateTime( f.DateLastModified, vbShortDate ) & "|" & _ FormatDateTime( f.DateLastModified, vbShortTime ) & "|" & _ f.Size & "|" & f.Name Next Set objFiles = Nothing Dim objFolders Set objFolders = objFolder.SubFolders For Each f In objFolders ParseFolder( f ) Next Set objFolders = Nothing End Sub Dim objFSO, objFolder, objOutputFile Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder( "." ) Set objOutputFile = objFSO.OpenTextFile("diraudit.txt", ForWriting, True) objOutputFile.WriteLine "path|date|time|size|name" Call ParseFolder( objFolder ) objOutputFile.Close Set objOutputFile = Nothing Set objFolder = Nothing Set objFSO = Nothing