Solved

Getting accurate folder details

Posted on 2009-07-16
12
385 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
ID: 24873117
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
ID: 24873122
Geez, pardon all the typos.  My fingers and brain don't always talk to each other.
0
 
LVL 67

Author Comment

by:sirbounty
ID: 24873887
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
ID: 24874438
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
ID: 24875092
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
ID: 24875190
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
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 10

Expert Comment

by:Alan_White
ID: 24876657
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
ID: 24881693
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
ID: 24885847
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
ID: 24913958
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
ID: 31604358
Thanks for the help!
0
 
LVL 76

Expert Comment

by:David Lee
ID: 24914922
No problem.  You're welcome!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A short article about a problem I had getting the GPS LocationListener working.
If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

920 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

15 Experts available now in Live!

Get 1:1 Help Now