Solved

Getting accurate folder details

Posted on 2009-07-16
12
384 Views
Last Modified: 2012-05-07
I have a script to read in a list of folders and for each one processed, try and retrieve the size of the folder, as well as number of files/folders contained therein (the exact results in a right-click property window on the folder would be ideal).

However, it seems using fso, I can't get accurate results.  One folder I'm testing against shows nearly 30mb with nearly 2000 files contained in over 300 folders.  My report shows the size (not the 'size on disk' - would love to have both), but only shows 3 folders and 0 for files...

Is there a reliable method to pull these details?
0
Comment
Question by:sirbounty
  • 6
  • 5
12 Comments
 
LVL 76

Expert Comment

by:David Lee
Comment Utility
Hi, SB.

Are you looping through all of the folders to get eh information or jsut reading the top level folder?
0
 
LVL 76

Expert Comment

by:David Lee
Comment Utility
Geez, pardon all the typos.  My fingers and brain don't always talk to each other.
0
 
LVL 67

Author Comment

by:sirbounty
Comment Utility
Np - I've just been reading the top level.  I thought it 'had' worked in the past...now I'm not so sure... : (
0
 
LVL 76

Expert Comment

by:David Lee
Comment Utility
I don't think there's a way to do this without iterating through the folders.  Even Explorer does that.  It does it a lot faster, but it still does it.
0
 
LVL 67

Author Comment

by:sirbounty
Comment Utility
Hmm - so I basically need some sort of counter for the files/folders then...  I think the size is actually correct for the entire folder though...
0
 
LVL 76

Accepted Solution

by:
David Lee earned 300 total points
Comment Utility
Something like this will do it.
Dim objFSO, varFiles, varFolders, varSize
 

Set objFSO = CreateObject("Scripting.FileSystemObject")

varFolders = -1

ProcessFolder objFSO.GetFolder("C:\SomeFolder")

Set objFSO = Nothing

'Code for doing something with the results goes here'

WScript.Quit
 

Sub ProcessFolder(objFolder)

    Dim objFile, objSubFolder

    For Each objFile In objFolder.Files

        varFiles = varFiles + 1

        varSize = varSize + objFile.Size

    Next

    varFolders = varFolders + 1

    For Each objSubFolder In objFolder.SubFolders

        ProcessFolder objSubFolder

    Next

    Set objFile = Nothing

    Set objSubFolder = Nothing

End Sub

Open in new window

0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 10

Expert Comment

by:Alan_White
Comment Utility
Yeah, the folder size works at top level (and very efficiently too) but if you want file count you have to trawl though each one.
0
 
LVL 67

Author Comment

by:sirbounty
Comment Utility
BDF - I'm off today, so I'll check this out on Monday.
Doesn't seem like I need to iterate the contents for size tho - I think that works fine as-is...this will still save me a bit of coding though - thanks.
0
 
LVL 76

Expert Comment

by:David Lee
Comment Utility
No problem.  

If there's no need to total up the size, then we can modify the code and skip iterating the files.  That should speed this up a little.
Dim objFSO, varFiles, varFolders
 

Set objFSO = CreateObject("Scripting.FileSystemObject")

varFolders = -1

ProcessFolder objFSO.GetFolder("C:\Users\David\Documents\Excel")

Set objFSO = Nothing
 

Sub ProcessFolder(objFolder)

    Dim objSubFolder

    varFiles = varFiles + objFolder.Files.count

    varFolders = varFolders + 1

    For Each objSubFolder In objFolder.SubFolders

        ProcessFolder objSubFolder

    Next

    Set objFile = Nothing

    Set objSubFolder = Nothing

End Sub

Open in new window

0
 
LVL 67

Author Comment

by:sirbounty
Comment Utility
Sorry for the delay - running into some permission problems.
It's of course something that shouldn't be a problem, but for whatever reason, it occasionally is.
I hate to simply ignore those folders, so I'm presently working on something to find and correct the problem before processing the folder.
Whether I can or cannot get this working though, I'll close this out shortly, because it is giving me what I need on the 'working' folders.  Thanks!
0
 
LVL 67

Author Closing Comment

by:sirbounty
Comment Utility
Thanks for the help!
0
 
LVL 76

Expert Comment

by:David Lee
Comment Utility
No problem.  You're welcome!
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This is an explanation of a simple data model to help parse a JSON feed
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now