get Directory Size

This topic contains 12 replies, has 6 voices, and was last updated by  Joakim Svendsen 2 years, 7 months ago.

  • Author
  • #13289

    Marjan S Poorsayyad

    Hi Guys,
    I am new in Power shell. I will appreciate if somebody answer my question.
    I am going to get the size of directory ( considering subdirectories , files and folders ) . Here the command which I used:
    "get-childitem -Path c:\windows\temp -recurse | measure-object -property Length -sum | select-object Count, Sum"
    but I think the size of directories with this command is a little less that size of my temp folder when I click on it with mouse and see properties. Does this command consider directory size ? or it just give me size of files on "temp" folder and its subdirectories?
    Does "count" just show the number of files? How can I get number of files and folders?
    Sorry for my English,
    MM PP

  • #13290

    Don Jones

    Directories don't have a size. The "size" of a directory is the sum of the sizes of the files contained in the directory. So the command is only giving you file sizes – because that's the only thing it can.

  • #13291

    Dave Wyatt

    If you have any hidden or System files within that directory tree, your current command isn't taking them into account. Try adding the -Force parameter to Get-ChildItem.

    Count will be showing both files and folders, as written, but as Don mentioned, only files will contribute to the Sum column in your output.

  • #13301

    Marjan S Poorsayyad

    Don, and Dave, Thanks for precious information. It worked:)

  • #13311

    Marjan S Poorsayyad

    Hi Everybody,
    I am going to put my powershell scrip in batch file ( here is my batch file : c:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -Command "Get-childitem –Path c:\windows\temp –recurse –Force | measure-object –property Length –Sum | select-object Count, Sum" > c:\myfolder\output.txt ).
    When I run my command ( Get-childitem –Path c:\windows\temp –recurse –Force | measure-object –property Length –Sum | select-object Count, Sum > c:\myfolder\output.txt ) in powershell window, it works, but it does not work from the batch file. I worked on it several hours. Can somebody tell me why it does not work from batch file?
    Sorry for my English , and thanks for your help!

  • #13315

    Wilson Acosta

    Have you tried including '> C:\MyFolder\Output.txt' in the double quotes as well? Or even using Out-File to create the log? Something like this:

    c:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -Command “Get-childitem –Path c:\windows\temp –recurse –Force | measure-object –property Length –Sum | select-object Count, Sum | Out-File C:\MyFolder\Output.txt”

    If I had to guess Powershell is putting out the results in its 'session' but it isn't being returned back to the command prompt 'session' since you're running the redirection outside of the shell. Hopefully that makes sense.

  • #13316

    Marjan S Poorsayyad

    Thanks Wilson, it works with double quote when I run the whole script on cmd line, but from batch file it wont create output file. Please take a look my attached command line file. I tried several format, but all don't work from the batch file.
    Again thanks for your solution!!

  • #13319

    Dave Wyatt

    You might have an easier time using powershell.exe's -EncodedCommand parameter; it was designed for situations like this, where quotation marks or special characters cause problems when trying to launch PowerShell from something like a batch file or command prompt. For instance, you can open up PowerShell and do this:

    $command = "Get-childitem –Path c:\windows\temp –recurse –Force | measure-object –property Length –Sum | select-object Count, Sum | Out-File C:\marjan\output.txt" 
    $encodedCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command))
    $encodedCommand | clip.exe

    At that point, the base64 encoded command will be on your clipboard, and you can paste it into your batch file. You'd launch PowerShell.exe like this:

  • #13326

    Vern Anderson

    wow that's cool Dave!

    Thank you!

  • #13334

    Marjan S Poorsayyad

    Thanks Dave, this is more complicated command. I run base64 encoded command in PowerShell, then I paste it in my batch file, Then I run it as an administrator, but still doesn't work. Please take a look in my attached files. What is the problem?
    Thanks for your time ,and your answer!

  • #13337

    Dave Wyatt

    It's hard to tell from the screenshot, but it looks like you've inserted at least one extra line break in the middle of the base-64 encoded command. That call to PowerShell.exe needs to all be on a single line of the batch file. Try turning off Word Wrap (from the Format menu of Notepad) to make sure it's all on one line.

  • #13338

    Marjan S Poorsayyad

    Thank you thank you Dave, Finally it worked:)

  • #22126

    Joakim Svendsen

    People looking for a script to find folder sizes who are struggling with max path length limitations, or slowness with Get-ChildItem, might want to check out the script that I put here, which uses robocopy under the hood, and is very fast. Faster than Get-ChildItem – and it'll work on paths longer than 260 characters. No more "path too long" exceptions messing up the numbers for your reports.

    Here it is:
    Get Folder Size with PowerShell, Blazingly Fast (

You must be logged in to reply to this topic.