GetSize: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.) |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{PageAuthor|Instructor}} | {{PageAuthor|Instructor}} | ||
Function "GetSize" was superseded by the [[Locate plugin]]. | |||
{{User:Instructor/Headers/Template}} | |||
== | == Function Description == | ||
<highlight-nsis> | |||
<highlight-nsis> | |||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
GetSize v1. | GetSize v1.9 | ||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Line 44: | Line 43: | ||
; | ; | ||
$var1 ; Result1: Size | $var1 ; Result1: Size | ||
$var2 ; Result2: | $var2 ; Result2: Number of files | ||
$var3 ; Result3: | $var3 ; Result3: Number of directories | ||
Line 51: | Line 50: | ||
-Error flag if disk or directory isn't exist | -Error flag if disk or directory isn't exist | ||
-Error flag if syntax error | -Error flag if syntax error | ||
</highlight-nsis> | |||
Example (1): | <b>Example (1):</b> | ||
Section | <highlight-nsis>Section | ||
; Find file size "C:\WINDOWS\Explorer.exe" in kilobytes | ; Find file size "C:\WINDOWS\Explorer.exe" in kilobytes | ||
Line 66: | Line 66: | ||
MessageBox MB_OK "Error" | MessageBox MB_OK "Error" | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example (2): | <b>Example (2):</b> | ||
Section | <highlight-nsis>Section | ||
; Find folder size "C:\Installs\Reanimator\Drivers" in megabytes | ; Find folder size "C:\Installs\Reanimator\Drivers" in megabytes | ||
Line 79: | Line 80: | ||
MessageBox MB_OK "Error" | MessageBox MB_OK "Error" | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example (3): | <b>Example (3):</b> | ||
Section | <highlight-nsis>Section | ||
; Find sum of files and folders "C:\WINDOWS" (no subfolders) | ; Find sum of files and folders "C:\WINDOWS" (no subfolders) | ||
Line 91: | Line 93: | ||
IfErrors 0 +2 | IfErrors 0 +2 | ||
MessageBox MB_OK "Error" | MessageBox MB_OK "Error" | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
== Function Code == | |||
<highlight-nsis> | |||
Function GetSize | Function GetSize | ||
!define GetSize `!insertmacro GetSizeCall` | !define GetSize `!insertmacro GetSizeCall` | ||
Line 255: | Line 258: | ||
IntCmp $R6 $6 0 0 findnext | IntCmp $R6 $6 0 0 findnext | ||
IntOp $R4 $R4 + 1 | IntOp $R4 $R4 + 1 | ||
System::Int64Op $R3 + $R6 | System::Int64Op /NOUNLOAD $R3 + $R6 | ||
Pop $R3 | Pop $R3 | ||
Line 265: | Line 268: | ||
show: | show: | ||
StrCmp $5$6 '' nosize | StrCmp $5$6 '' nosize | ||
System::Int64Op $R3 / $1 | System::Int64Op /NOUNLOAD $R3 / $1 | ||
Pop $9 | Pop $9 | ||
DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5' | DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5' |
Latest revision as of 12:58, 17 July 2020
Author: Instructor (talk, contrib) |
Function "GetSize" was superseded by the Locate plugin.
Page for NSIS 2.07 and below users
You can use the latest version of headers (recommended) or the following function code (put the function code in your script before calling it)
Function Description
____________________________________________________________________________ GetSize v1.9 ____________________________________________________________________________ Thanks KiCHiK (Function "FindFiles") Features: 1. Find the size of a file, files mask or directory. 2. Find the sum of the files, directories and subdirectories. Syntax: ${GetSize} "[Path]" "[Options]" $var1 $var2 $var3 "[Path]" ; Disk or Directory ; "[Options]" ; /M=[mask] ; /M=*.* - Find all (default) ; /M=*.doc - Find Work.doc, 1.doc ... ; /M=Pho* - Find PHOTOS, phone.txt ... ; /M=win???.exe - Find winamp.exe, winver.exe ... ; /M=winamp.exe - Find winamp.exe only ; /S=No:No[B|K|M|G] ; /S= - Don't find file size (faster) (default) ; /S=0:0B - Find only files of 0 Bytes exactly ; /S=5:9K - Find only files of 5 to 9 Kilobytes ; /S=:10M - Find only files of 10 Megabyte or less ; /S=1G - Find only files of 1 Gigabyte or more ; /G=[1|0] ; /G=1 - Find with subdirectories (default) ; /G=0 - Find without subdirectories ; $var1 ; Result1: Size $var2 ; Result2: Number of files $var3 ; Result3: Number of directories Note: -Error flag if disk or directory isn't exist -Error flag if syntax error
Example (1):
Section ; Find file size "C:\WINDOWS\Explorer.exe" in kilobytes ${GetSize} "C:\WINDOWS" "/M=Explorer.exe /S=0K /G=0" $0 $1 $2 ; $0="220" Kb ; $1="1" files ; $2="" directories IfErrors 0 +2 MessageBox MB_OK "Error" SectionEnd
Example (2):
Section ; Find folder size "C:\Installs\Reanimator\Drivers" in megabytes ${GetSize} "C:\Installs\Reanimator\Drivers" "/S=0M" $0 $1 $2 ; $0="132" Mb ; $1="555" files ; $2="55" directories IfErrors 0 +2 MessageBox MB_OK "Error" SectionEnd
Example (3):
Section ; Find sum of files and folders "C:\WINDOWS" (no subfolders) ${GetSize} "C:\WINDOWS" "/G=0" $0 $1 $2 ; $0="" size ; $1="253" files ; $2="46" directories IfErrors 0 +2 MessageBox MB_OK "Error" SectionEnd
Function Code
Function GetSize !define GetSize `!insertmacro GetSizeCall` !macro GetSizeCall _PATH _OPTIONS _RESULT1 _RESULT2 _RESULT3 Push `${_PATH}` Push `${_OPTIONS}` Call GetSize Pop ${_RESULT1} Pop ${_RESULT2} Pop ${_RESULT3} !macroend Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 Push $R9 ClearErrors StrCpy $R9 $0 1 -1 StrCmp $R9 '\' 0 +3 StrCpy $0 $0 -1 goto -3 IfFileExists '$0\*.*' 0 error StrCpy $3 '' StrCpy $4 '' StrCpy $5 '' StrCpy $6 '' StrCpy $8 0 StrCpy $R3 '' StrCpy $R4 '' StrCpy $R5 '' option: StrCpy $R9 $1 1 StrCpy $1 $1 '' 1 StrCmp $R9 ' ' -2 StrCmp $R9 '' sizeset StrCmp $R9 '/' 0 -4 StrCpy $9 -1 IntOp $9 $9 + 1 StrCpy $R9 $1 1 $9 StrCmp $R9 '' +2 StrCmp $R9 '/' 0 -3 StrCpy $8 $1 $9 StrCpy $8 $8 '' 2 StrCpy $R9 $8 '' -1 StrCmp $R9 ' ' 0 +3 StrCpy $8 $8 -1 goto -3 StrCpy $R9 $1 2 StrCpy $1 $1 '' $9 StrCmp $R9 'M=' 0 size StrCpy $4 $8 goto option size: StrCmp $R9 'S=' 0 gotosubdir StrCpy $6 $8 goto option gotosubdir: StrCmp $R9 'G=' 0 error StrCpy $7 $8 StrCmp $7 '' +3 StrCmp $7 '1' +2 StrCmp $7 '0' 0 error goto option sizeset: StrCmp $6 '' default StrCpy $9 0 StrCpy $R9 $6 1 $9 StrCmp $R9 '' +4 StrCmp $R9 ':' +3 IntOp $9 $9 + 1 goto -4 StrCpy $5 $6 $9 IntOp $9 $9 + 1 StrCpy $1 $6 1 -1 StrCpy $6 $6 -1 $9 StrCmp $5 '' +2 IntOp $5 $5 + 0 StrCmp $6 '' +2 IntOp $6 $6 + 0 StrCmp $1 'B' 0 +4 StrCpy $1 1 StrCpy $2 bytes goto default StrCmp $1 'K' 0 +4 StrCpy $1 1024 StrCpy $2 Kb goto default StrCmp $1 'M' 0 +4 StrCpy $1 1048576 StrCpy $2 Mb goto default StrCmp $1 'G' 0 error StrCpy $1 1073741824 StrCpy $2 Gb default: StrCmp $4 '' 0 +2 StrCpy $4 '*.*' StrCmp $7 '' 0 +2 StrCpy $7 '1' StrCpy $8 1 Push $0 SetDetailsPrint textonly nextdir: IntOp $8 $8 - 1 Pop $R8 FindFirst $0 $R7 '$R8\$4' IfErrors show StrCmp $R7 '.' 0 +5 FindNext $0 $R7 StrCmp $R7 '..' 0 +3 FindNext $0 $R7 IfErrors show dir: IfFileExists '$R8\$R7\*.*' 0 file IntOp $R5 $R5 + 1 goto findnext file: StrCpy $R6 0 StrCmp $5$6 '' 0 +3 IntOp $R4 $R4 + 1 goto findnext FileOpen $9 '$R8\$R7' r IfErrors +3 FileSeek $9 0 END $R6 FileClose $9 StrCmp $5 '' +2 IntCmp $R6 $5 0 findnext StrCmp $6 '' +2 IntCmp $R6 $6 0 0 findnext IntOp $R4 $R4 + 1 System::Int64Op /NOUNLOAD $R3 + $R6 Pop $R3 findnext: FindNext $0 $R7 IfErrors 0 dir FindClose $0 show: StrCmp $5$6 '' nosize System::Int64Op /NOUNLOAD $R3 / $1 Pop $9 DetailPrint 'Size:$9 $2 Files:$R4 Folders:$R5' goto subdir nosize: DetailPrint 'Files:$R4 Folders:$R5' subdir: StrCmp $7 0 preend FindFirst $0 $R7 '$R8\*.*' StrCmp $R7 '.' 0 +5 FindNext $0 $R7 StrCmp $R7 '..' 0 +3 FindNext $0 $R7 IfErrors +7 IfFileExists '$R8\$R7\*.*' 0 +3 Push '$R8\$R7' IntOp $8 $8 + 1 FindNext $0 $R7 IfErrors 0 -4 FindClose $0 StrCmp $8 0 0 nextdir preend: StrCmp $R3 '' nosizeend System::Int64Op $R3 / $1 Pop $R3 nosizeend: StrCpy $2 $R4 StrCpy $1 $R5 StrCpy $0 $R3 goto end error: SetErrors StrCpy $0 '' StrCpy $1 '' StrCpy $2 '' end: SetDetailsPrint both Pop $R9 Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Exch $2 Exch Exch $1 Exch 2 Exch $0 FunctionEnd