Problem with script

I initially wrote a script that returns # of files, folders and folder size in a specific folder based on an input directory.  I am trying to modify the script to read from a source file, and it is not working.  Additionally, on directories with less than 100KB, it is not returning size.  Can someone help me de-bug it please?  Code is below.

Thanks,

IPT

*******************

Option Explicit
On Error Resume Next

Dim objfso, boolExcel, objXL, cellcount, nTotal, FolderCount, drive, fso, fl, folder, fsize, TotalSize, openfile, fstring_err

set objfso = createobject("scripting.filesystemobject")

if objfso.FileExists("C:\Program Files\Microsoft Office\Office11\excel.exe") then
      boolExcel = true
      Set objXL = WScript.CreateObject("Excel.Application")
end if

if boolExcel then
      objXL.Visible = TRUE
      objXL.WorkBooks.Add

      objXL.Columns(1).ColumnWidth = 30
      objXL.Columns(2).ColumnWidth = 30
      objXL.Columns(3).ColumnWidth = 30
      objXL.Columns(4).ColumnWidth = 30
      
      objXL.Cells(1, 1).Value = "Folder Name"
      objXL.Cells(1, 2).Value = "Number of Files"
      objXL.Cells(1, 3).Value = "Number of Folders"
      objXL.Cells(1, 4).Value = "Size of Root Folder"

      cellcount = 4
else
      set output = objfso.CreateTextFile("filecheck.txt",true)
      output.writeline "Folder Name,File Count,Size"
end if

Set fso = CreateObject("Scripting.FileSystemObject")
Set fstring_err = fso.CreateTextFile("c:\errorlog.txt", True)
Set getfilepath = fso.GetFile("c:\checkfilesize.txt")
Set openfile = getfilepath.OpenAsTextStream(1, -2)
        Do While Not openfile.AtEndOfStream
                  strfilepath = ""
                  strfilepath = openfile.ReadLine
                              For Each strfilepath in getfilepath
                                    Set fl = fso.GetFolder(strfilepath)                        
                                          GetFileCount fl
                                          objXL.Cells(cellcount,1) = fl.path
                                          objXL.Cells(cellcount,2) = nTotal
                                          objXL.Cells(cellcount,3) = FolderCount
                                          objXL.Cells(cellcount,4) = fsize
                                          cellcount = cellcount + 1
                              Next
        Loop
            msgbox "Process completed!"
      
openfile.Close
fstring_err.Close
Set fso = Nothing
Set wsh = Nothing

Function GetFileCount(fl)
Dim nextFolder, folders, Files, SubFolders, SubFolder, firstpass, nextf
err.clear
nextFolder = fl.Path
Set Files = fl.Files
Set folders = fl.subfolders
nTotal = nTotal + Files.Count
FolderCount = FolderCount + folders.Count
Set SubFolders = fl.SubFolders
For Each SubFolder In SubFolders
      nextf = nextf & folders.Count
    nextFolder = nextFolder & GetFileCount(SubFolder)
            fsize = round(fl.size /1024)
            if len(fsize) >= 4 then
                  fsize = Round(fsize /1024) & " MB"
            else
                  fsize = Round(fsize) & " KB"
            end if      
      if err.number <> 0 then
            msgBox SubFolder & " - " & err.description
      end if            
Next
End Function
iptraderAsked:
Who is Participating?
 
jkaiosIT DirectorCommented:
Try the new function below (SizeToString) to convert the filesize.

For Each SubFolder In SubFolders
    nextf = nextf & folders.Count
    nextFolder = nextFolder & GetFileCount(SubFolder)
          fsize = SizeToString(fl.size)                                 '<---- TRY IT HERE
     if err.number <> 0 then
          msgBox SubFolder & " - " & err.description
     end if          
Next


'================================
Function SizeToString(dBytes)

 Dim sWork  'String
 Dim vWork  'Variant
 Dim lWork   'Long
 Dim dTemp 'Double
 
 sWork = FormatNumber(dBytes)
 vWork = Split(sWork, ",")
 lWork = UBound(vWork)
 
 Select Case lWork
   Case 0      '// Hundred
     sWork = " bytes"
     vWork = dBytes
   Case 1      '// Thousand
     dTemp = dBytes / 1024
     sWork = " KB"
     vWork = Round(dTemp, 2)
   Case 2      '// Million
     dTemp = dBytes / (1024 ^ 2)
     sWork = " MB"
     vWork = Round(dTemp, 2)
   Case 3      '// Billion
     dTemp = dBytes / (1024 ^ 3)
     sWork = " GB"
     vWork = Round(dTemp, 2)
   Case 4      '// Trillion
     dTemp = dBytes / (1024 ^ 4)
     sWork = " TB"
     vWork = Round(dTemp, 2)
 End Select
 
 If InStr(vWork, ".") Then
   SizeToString = FormatNumber(vWork, 1) & sWork
 Else
   SizeToString = vWork & sWork
 End If
 
End Function
'================================
0
 
iptraderAuthor Commented:
jkaios, it is still not returning size for anything under 100 KB.  Sorry.

IPT
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.