2012 Scripting Games Advanced Event 4: Determine Folder Space

2012 Scripting Games Advanced Event 4: Determine Folder Space

  • Comments 19
  • Likes

 2012 Scripting Games badge

Summary: In Advanced Event 4, you are required to determine which folders consume the most space.


About this event



Date of Event

4/5/2012 12:01 AM

Due Date

4/12/2012 12:01 AM


Event scenario

You are a freelance journalist, and as a result, you travel to various locations around the world in search of the latest and greatest news. You create a folder for each story you work on. The folder holds the Word document that contains the basic story, numerous picture files, and an Excel spreadsheet that details location, contacts, expenses, and publications that have been offered the story. If you recast a story for additional markets, that story appears in a subfolder. All of the folders are grouped by year.

The folder arrangement works great, and it simplifies data backup, but the problem is that your laptop appears to be running out of disk space. It might be possible to archive story folders from previous years, but the problem with that idea is that you often like to use pictures that were not published in the earlier stories in later articles. Therefore, a simple archive by date might not be the most effective solution.

You decide to write a Windows PowerShell script that reports folder size so that you can make a more informed decision to reclaim the most disk space and yet maintain access to the most useful content from previous years. An appropriate output is shown in the image that follows.

Image of command output

Design points

  • You do not need to check for admin rights in this script. Assume you have permissions to access the folders you want to check.
  • You should return a custom object to permit further analysis and sorting.
  • You should display folder size in the most appropriate unit of measurement. Therefore, do not report 1073741824 bytes when you could just as easily report 1 Gigabyte.
  • You should report sizes accurate to two decimal places. Do not report 1.23456794 bytes; instead, round it to 1.23 bytes.
  • You should accept a command-line parameter that permits you to supply a specific folder. You should recurse by default.
  • You should consider adding comment-based Help.
  • You should consider creating reusable functions as part of this script.

2012 Scripting Games links

2012 Scripting Games: All Links on One Page

I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. Good luck as you compete in this year’s Scripting Games. We wish you well.

Ed Wilson, Microsoft Scripting Guy 

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Hi Ed,

    this looks like ... an easy one!

    In fact I would probably suggest to buy a bigger hard disk at first sight :-)

    But, as the (ugly) details are often burried behind a short sentence ... let's see, what we'll end up with after a couple of overthoughts :-)


  • Hi Ed,

    after a second thought .. one (more serious) question:

    Should we report the size of a folder as the size of all files in the folder excluding the sizes of each subfolder or including the sizes of each subfolder ... or both :-) ?


  • @K_Schulte, in my perception the answer is given in the picture. Good luck!

  • @K_Schulte this event is not overly tricky, but I did not think it was really simple either. There are a lot of design points for this scenario.

  • @K_Schulte You only need to report the size of each sub folder, not the size of the files in each sub folder.

  • @Werner you are right :-) It is in the picture.

  • I can't publish my script for this challenge on the site - https://2012sg.poshcode.org/. I  click on "Save" and browser redirected to the main page. For log on i use -Google id.

  • Hi Ed,

    now ... I don't understand what you said:

    "You only need to report the size of each sub folder, not the size of the files in each sub folder."

    The size of a folder is the size of all files in the folder + ( maybe: the size of each subfolder ) recursively defined.

    I would like to know, which definition holds?

    A folder size can'Ät be measured in sizes of all fsubfolders, if the file sizes in each folder don't count!

    This will always result in NULL!


  • Root (1MB) +-- Sub1 (2MB) +-- Sub11 (3MB) +-- Sub111 (4MB)

              |              |               +-- Sub112 (5MB)

              |              +-- Sub12 (6MB)


              +-- Sub2 (7MB) +-- Sub21 (8MB) --- Sub212 (9MB)

                             +-- Sub22 (10MB)

    1. Sum up all files in current directory    

    Root   - 1MB

    Sub1   - 2MB

    Sub2   - 7MB

    Sub11  - 3MB

    Sub12  - 6MB

    Sub21  - 8MB

    Sub22  - 10MB

    Sub111 - 4MB

    Sub112 - 5MB

    Sub212 - 9MB

    2. Sum up all files in current folder AND all files in all subfolders

    Root   - 45MB

    Sub1   - 20MB

    Sub2   - 34MB

    Sub11  - 12MB

    Sub12  - 6MB

    Sub21  - 17MB

    Sub22  - 10MB

    Sub111 - 4MB

    Sub112 - 5MB

    Sub212 - 9MB

    3. Sum up all files in all subfolders without files in current folder

    Root   - 44MB

    Sub1   - 18MB

    Sub2   - 27MB

    Sub11  - 9MB

    Sub12  - 0MB

    Sub21  - 9MB

    Sub22  - 0MB

    Sub111 - 0MB

    Sub112 - 0MB

    Sub212 - 0MB

    Hie Ed, what is it, what you wanted us to do?


  • This one was reasonably tough for me.  I had a lot of fun writing it.

  • But I'm having the same problem as Sergey a couple posts up.

  • @K_Schulte I think scenario 3. Sum the files in each sub folder, but do not include the size of the files in the current folder. Those files are reported separately.

  • @Ryan Ries I am glad you had fun writing the solution to this event.

  • @Ryan yes, it seems that some people are still having problems uploading their scripts. I will post back when upload is back on line.

  • PoshCode is back up and running. Thank you everyone for your understanding. My apologies for any inconvenience