Quick Folder Size
Back to Samples
Illustrates:
- Automation of DOS commands to accomplish a recursive folder scan.
- Basic use of StringFormat
Notes:
- This is a quicker version of Folder Size, but based on a similar principle. The difference is that this version lets DOS even do the adding up!
;-------------------------------------------------------------------------------- ;Example of call to UDF _FolderSize() ;-------------------------------------------------------------------------------- $sFolder = @TempDir $nFolderSize = _FolderSize($sFolder) If @error then ;failed Else Msgbox (4096 + 32,@ScriptName, StringFormat("Bytes in %s = %d", $sFolder, $nFolderSize)) Endif Func _FolderSize($psFolder) ;-------------------------------------------------------------------------------- ;Uses the DOS "dir" command to recurse through all subfolders, ;listing the size of each one, followed by a final summary total ;which is in fact the value we're after! ;-------------------------------------------------------------------------------- Local $sFileList, $nFileList, $nTotalSize $sFileList = "C:\_FolderSize.LST" RunWait(@Comspec & " /C DIR """ & $psFolder & """ /s /A:-D /-C|find ""File(s)""> " & $sFileList,"", @SW_HIDE) #cs .. returns a list like this, where the LAST LINE IS THE TOTAL OF ALL EARLIER LINES ;o) 84 File(s) 792992 bytes 6 File(s) 10400 bytes 5 File(s) 1648 bytes 85 File(s) 1721301 bytes 77 File(s) 36400 bytes 81 File(s) 45170 bytes 338 File(s) 2607911 bytes #ce $nFileList = FileOpen($sFileList, 0) ;0=open If $nFileList = -1 then ;Couldn't open list of files in designated folder SetError(1) Return 0 Endif ;Read the listfile, and keep the value from the last line $nTotalSize = 0 While 1 $sFolderSize = FileReadLine($nFileList) if @error = -1 then;EOF ExitLoop endif $sTotalSize = $sFolderSize Wend $nTotalSize = StringMid($sTotalSize, 25, 15) ;Cleanup FileClose($nFileList) FileDelete($sFileList) Return $nTotalSize EndFunc