Dos Command/Batch file to find a folder size

Hello,
I need a DOS command/Batch file to get the folder size alone.
Example C:Sample1
Size is :457865

Batch file must be DOS based.

Please help me on this.
Thanks

Comments

  • Hello,

    I recently had a need to do this also.
    Here is what I came up with.
    It runs a DIR /S on the current directory and returns the second last line, which is the total size.
    EG. 15976 File(s) 2,900,344,439 bytes
    delims=)" splits it down the middle where the ")" character of "file(s)" is.
    The last two SETs take off the word "bytes" and the leading spaces.
    EG. Size is :2900344439
    All the echos except for the last one are for debugging.
    It needs to be in a batch file for the variable names to work.

    @For /F "tokens=*" %%a IN ('"dir /s /-c | find "bytes" | find /v "free""') do @Set summaryout=%%a
    @Echo %summaryout%
    @For /f "tokens=1,2 delims=)" %%a in ("%summaryout%") do @set filesout=%%a&set sizeout=%%b
    @Echo %filesout%
    @Echo %sizeout%
    @Set sizeout=%sizeout:bytes=%
    @Echo %sizeout%
    @Set sizeout=%sizeout: =%
    @Echo Size is :%sizeout%

    Hope it does the trick for you.

    - Xanque
  • Xanque,

    Thank you very much for your support.
    It worked fine.

    Trusp
  • That other solution is grotesque! For the rest of the world trying to solve the same problem, try this:
    --------
    setlocal enabledelayedexpansion
    set dir=%1
    set size=0

    for /R %dir% %%F in (*) do ( set /a size=!size!+%%~zF )

    echo %size%
    endlocal
    --------
    Some explanation:
    - "for /R %dir%" means loop recursively through the directory dir.
    - %%F is the name of the variable
    - in (*) means "match any filename". You could put something else here, like "in (*.jpg)" if you only wanted to know the total size of the pictures in a directory.
    - set /a size indicates that the value to the right of the = is an arithmetic expression that needs to be evaluated
    - !size! is like %size% but ! indicates you want to use delayed expansion
    - %%~zF gets the size in bytes of the file %%F

    I recommend http://ss64.com/nt/ and http://ss64.com/nt/syntax.html as references for writing batch files.
  • broken forum...duplicate post
  • Try this freeware
    http://www.mindgems.com/products/Folder-Size/Folder-Size.html
    it is really good and contains no adware or spam!
  • Grotesque or not (I'm going with 'not'), Xanque's solution is much faster than yours, and I for one think it's pretty ingenious. Furthermore, I'm quite sure your solution could have been offered in a much less insulting way...
  • You are right, cewittic.
    String hack and slash isn't usually my style.
    But I thought, "Why not? When dir /s is doing all the hard work"

    Interestingly, I started with a script that looked very similar to yours, adding totals on the fly in a one-line elegant loop, but inconsistencies, errors and speed led me down the dark path of string manipulation.
    To be honest, I was excited when you offered another option, but alas, it also returned errors on one of my sample sets, and on another sample set the grand total was much, much less than what dir /s returned.
    1)
    Size is :51520954092

    Invalid number. Numbers are limited to 32-bits of precision.
    -1933777592

    2)
    Size is :190833669782

    1802399972

    One says 190GB, the other says 1.8GB. Which would you believe?

    The cleaned-up version, with system and hidden files calculated (/a).
    Something that should have been there in the first place, I know. My original need didn't require it.


    @echo off
    For /F "tokens=*" %%a IN ('"dir /s /-c /a | find "bytes" | find /v "free""') do Set xsummary=%%a
    For /f "tokens=1,2 delims=)" %%a in ("%xsummary%") do set xfiles=%%a&set xsize=%%b
    Set xsize=%xsize:bytes=%
    Set xsize=%xsize: =%
    Echo Size is :%xsize%


    Still ugly?
    It's 100% reliable on any data set.
    That's good enough for me, not sure about the rest of the world.
    I'd encourage them to try both and make up their own mind.

    - Xanque
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Although I don't understand it, I like your script.

    I have a slightly different need though. I would like to monitor folder sizes over time and need something that can dump recursive folder sizes into a text file, eg.

    99999M C:
    99999M C:Program Files
    99999M C:Program FilesAdobe
    ...
    99999M C:Windows
    99999M C:Windowswinsxs
    ...

    I will then manipulate this output in the way I want. Are you able to devise a script that can produce the above output?
  • Hi all.
    I want to change this cod to work in loop mode and list name & size & filecountall of each subfolders.
    But in output of new code; just "folder name" is changed and "foldersize" & "foldercount" for all subfolder is the same.
    Please correct this code and help me.
    Thanks.
    @echo off
    for /d %%D in (".*") do (
    echo "%%D"
    For /F "tokens=*" %%a IN ('"dir /s /-c /a "%%D" | find "bytes" | find /v "free""') do Set xsummary=%%a
    For /f "tokens=1,2 delims=)" %%a in ("%xsummary%") do set xfiles=%%a&set xsize=%%a
    Set xsize=%xsize:bytes = %
    Set xsize=%xsize: = %
    echo %xsize%
    echo %xfiles%
    )
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories