Discuss RoboTask here
Rukbunker
Posts: 218 Joined: Mon Feb 22, 2016 4:06 pm
Location: Netherlands
Post
by Rukbunker » Tue Aug 28, 2018 1:03 pm
Hey Oleg,
With the DEMO task of simple calculations, I wanted to calculate the size of a folder divided by 1048576 to get the size in MB (and if > 1024, then again divided by 1024 to get GB, but that's later).
I've tested it with a folder, it works. Another folder is bigger and the task goes wrong. See screenshot.
Capture.PNG (66.29 KiB) Viewed 10810 times
What is the best way to achieve this?
Code: Select all
;*****************************
;* RoboTask Task file
;* Do not edit in text editor!
;*****************************
[Root]
ActionAfterRun=INTEGER|0
Actions=FOLDER
Automat=INTEGER|-1
CatID=INTEGER|161709911
Comment=STRINGLIST
ContinueOnError=INTEGER|0
DoNotStopWhenShutdown=INTEGER|0
ExternalName=STRING|"Task89"
Hide=INTEGER|0
ID=INTEGER|1386133181
LocalVariables=STRING|"Root=\\snlkamfile1\home\"
LogOnAsUser=INTEGER|1
Name=STRING|"Calc the folder size (with basic script) (imported)"
OnErrorTaskID=INTEGER|-1
Priority=INTEGER|3
RunOnClose=INTEGER|0
RunOnStartup=INTEGER|0
ToLog=INTEGER|3
UnicodeFormat=INTEGER|0
WriteGeneralLog=INTEGER|0
[Actions]
Action1=FOLDER
Action10=FOLDER
Action11=FOLDER
Action12=FOLDER
Action13=FOLDER
Action14=FOLDER
Action15=FOLDER
Action2=FOLDER
Action3=FOLDER
Action4=FOLDER
Action5=FOLDER
Action6=FOLDER
Action7=FOLDER
Action8=FOLDER
Action9=FOLDER
[Actions\Action1]
ActionID=STRING|"A_DIALOG_BROWSEFOLDERS"
Enabled=INTEGER|-1
Name=STRING|"Browse for Folders"
Params=FOLDER
[Actions\Action1\Params]
caption=STRING|"Select Folder"
default=STRING|"None"
filter=STRING|"Text files|*.txt|All files|*.*|"
variable=STRING|"FOLDER_TO_CALC"
[Actions\Action10]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""RES"" with value """""
Params=FOLDER
[Actions\Action10\Params]
expand=STRING|"0"
varkind=STRING|"1"
varname=STRING|"RES"
[Actions\Action11]
ActionID=STRING|"BASIC_EVALUATE"
Enabled=INTEGER|-1
Name=STRING|"Evaluate"
Params=FOLDER
[Actions\Action11\Params]
expression=STRING|"{var1}/{var2}"
variable=STRING|"RES"
[Actions\Action12]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""Result = {res}"""
Params=FOLDER
[Actions\Action12\Params]
icon=STRING|"1"
msg0=STRING|"Result = {res}"
msgcount=STRING|"1"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action13]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""FOLDER_TO_CALC"""
Params=FOLDER
[Actions\Action13\Params]
varname=STRING|"FOLDER_TO_CALC"
[Actions\Action14]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""TOTALSIZE"""
Params=FOLDER
[Actions\Action14\Params]
varname=STRING|"TOTALSIZE"
[Actions\Action15]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""FILECOUNT"""
Params=FOLDER
[Actions\Action15\Params]
varname=STRING|"FILECOUNT"
[Actions\Action2]
ActionID=STRING|"A_FLOW_IF"
Enabled=INTEGER|-1
Name=STRING|"If Then"
Params=FOLDER
[Actions\Action2\Params]
case=STRING|"0"
operator=STRING|"0"
type=STRING|"0"
value1=STRING|"{folder_to_calc}"
value2=STRING|"none"
[Actions\Action3]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""You haven't chosen the folder"""
Params=FOLDER
[Actions\Action3\Params]
icon=STRING|"1"
msg0=STRING|"You haven't chosen the folder"
msgcount=STRING|"1"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action4]
ActionID=STRING|"A_FLOW_ELSE"
Enabled=INTEGER|-1
Name=STRING|"Else"
[Actions\Action5]
ActionID=STRING|"BASIC_SCRIPT"
Enabled=INTEGER|-1
Name=STRING|"Basic Script"
Params=FOLDER
[Actions\Action5\Params]
line00000=STRING|"Public Const MAX_PATH = 260"
line00001=STRING|"Public Const FILE_ATTRIBUTE_DIRECTORY = &H10"
line00003=STRING|"Public Type FILETIME"
line00004=STRING|" dwLowDateTime As Long"
line00005=STRING|" dwHighDateTime As Long"
line00006=STRING|"End Type"
line00008=STRING|"Public Type WIN32_FIND_DATA"
line00009=STRING|" dwFileAttributes As Long"
line00010=STRING|" ftCreationTime As FILETIME"
line00011=STRING|" ftLastAccessTime As FILETIME"
line00012=STRING|" ftLastWriteTime As FILETIME"
line00013=STRING|" nFileSizeHigh As Long"
line00014=STRING|" nFileSizeLow As Long"
line00015=STRING|" dwReserved0 As Long"
line00016=STRING|" dwReserved1 As Long"
line00017=STRING|" cFileName As String * MAX_PATH"
line00018=STRING|" cAlternate As String * 14"
line00019=STRING|"End Type"
line00021=STRING|"Public Declare Function FindClose Lib ""kernel32"" Alias ""FindClose"" (ByVal hFindFile As Long) As Long"
line00022=STRING|"Public Declare Function FindFirstFile Lib ""kernel32"" Alias ""FindFirstFileA"" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long"
line00023=STRING|"Public Declare Function FindNextFile Lib ""kernel32"" Alias ""FindNextFileA"" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long"
line00025=STRING|"Dim FileCount As Long"
line00026=STRING|"Dim TotalSize As Double"
line00028=STRING|"Sub CalcFolder(ByVal AFolder As String)"
line00029=STRING|" Dim sh As Long"
line00030=STRING|" Dim FindData As WIN32_FIND_DATA"
line00031=STRING|" Dim res As Long"
line00032=STRING|" Dim FileName As String"
line00034=STRING|" sh = FindFirstFile(AFolder+""\*.*"", FindData)"
line00035=STRING|" If sh>=0 Then"
line00036=STRING|" res = 1"
line00037=STRING|" While res>0"
line00039=STRING|" FileName = Left(FindData.cFileName, InStr(FindData.cFileName,Chr(0))-1) 'because FindData.cFileName always containt 260 chars"
line00041=STRING|" If (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then 'file"
line00042=STRING|" FileCount = FileCount + 1"
line00043=STRING|" TotalSize = TotalSize + FindData.nFileSizeLow"
line00044=STRING|" Else 'directory"
line00045=STRING|" If FileName <> ""."" And FileName <> "".."" Then ' !!!important!!! skip ""."" and "".."" pseudofolders"
line00046=STRING|" CalcFolder(AFolder + ""\"" + FileName)"
line00047=STRING|" End If"
line00048=STRING|" End If"
line00049=STRING|" res = FindNextFile(sh,FindData)"
line00050=STRING|" Wend"
line00051=STRING|" FindClose(sh)"
line00052=STRING|" End If"
line00053=STRING|"End Sub"
line00055=STRING|"Sub Main"
line00056=STRING|" Dim s As String"
line00057=STRING|" FileCount=0"
line00058=STRING|" TotalSize=0"
line00059=STRING|" s = RoboTaskApp.ExpandText(""{Folder_To_Calc}"")"
line00060=STRING|" CalcFolder(s)"
line00061=STRING|" RoboTaskApp.SetUserVariable(""FileCount"", Str(FileCount))"
line00062=STRING|" RoboTaskApp.SetUserVariable(""TotalSize"", Str(TotalSize))"
line00063=STRING|"End Sub"
linecount=STRING|"64"
source=STRING|"0"
[Actions\Action6]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""Folder ""{Folder_To_Calc}"" contains """
Params=FOLDER
[Actions\Action6\Params]
icon=STRING|"1"
msg0=STRING|"Folder ""{Folder_To_Calc}"" contains "
msg1=STRING|"{FileCount} files"
msg2=STRING|"{TotalSize} bytes"
msgcount=STRING|"3"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action7]
ActionID=STRING|"A_FLOW_ENDIF"
Enabled=INTEGER|-1
Name=STRING|"End If"
[Actions\Action8]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""VAR1"" with value ""{TotalSize}"""
Params=FOLDER
[Actions\Action8\Params]
expand=STRING|"1"
varkind=STRING|"1"
varname=STRING|"VAR1"
varvalue=STRING|"{TotalSize}"
[Actions\Action9]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""VAR2"" with value ""1048576"""
Params=FOLDER
[Actions\Action9\Params]
expand=STRING|"1"
varkind=STRING|"1"
varname=STRING|"VAR2"
varvalue=STRING|"1048576"
Oleg
Site Admin
Posts: 3201 Joined: Thu Jan 01, 1970 1:00 am
Contact:
Post
by Oleg » Tue Aug 28, 2018 3:44 pm
Look at the step #11
change the expression to value:
{var1}E+0/{var2} or
{var1}.0/{var2}
In this case BASIC engine will use 1-st value as
a real (or double) value (not an integer)
This works with small values too.
see corrected task below:
Code: Select all
;*****************************
;* RoboTask Task file
;* Do not edit in text editor!
;*****************************
[Root]
ActionAfterRun=INTEGER|0
Actions=FOLDER
Automat=INTEGER|0
CatID=INTEGER|444033236
Comment=STRINGLIST
ContinueOnError=INTEGER|0
DoNotStopWhenShutdown=INTEGER|0
ExternalName=STRING|"Task331"
Hide=INTEGER|0
ID=INTEGER|1386133181
LocalVariables=STRING|"Root=\\snlkamfile1\home\"
LogOnAsUser=INTEGER|1
Name=STRING|"Calc the folder size (with basic script)"
OnErrorTaskID=INTEGER|-1
Priority=INTEGER|3
RunOnClose=INTEGER|0
RunOnStartup=INTEGER|0
ToLog=INTEGER|3
UnicodeFormat=INTEGER|0
WriteGeneralLog=INTEGER|0
[Actions]
Action1=FOLDER
Action10=FOLDER
Action11=FOLDER
Action12=FOLDER
Action13=FOLDER
Action14=FOLDER
Action15=FOLDER
Action2=FOLDER
Action3=FOLDER
Action4=FOLDER
Action5=FOLDER
Action6=FOLDER
Action7=FOLDER
Action8=FOLDER
Action9=FOLDER
[Actions\Action1]
ActionID=STRING|"A_DIALOG_BROWSEFOLDERS"
Enabled=INTEGER|-1
Name=STRING|"Browse for Folders"
Params=FOLDER
[Actions\Action1\Params]
caption=STRING|"Select Folder"
default=STRING|"None"
filter=STRING|"Text files|*.txt|All files|*.*|"
variable=STRING|"FOLDER_TO_CALC"
[Actions\Action10]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""RES"" with value """""
Params=FOLDER
[Actions\Action10\Params]
expand=STRING|"0"
varkind=STRING|"1"
varname=STRING|"RES"
[Actions\Action11]
ActionID=STRING|"BASIC_EVALUATE"
Enabled=INTEGER|-1
Name=STRING|"Evaluate"
Params=FOLDER
[Actions\Action11\Params]
expression=STRING|"{var1}E+0/{var2}"
variable=STRING|"RES"
[Actions\Action12]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""Result = {res}"""
Params=FOLDER
[Actions\Action12\Params]
icon=STRING|"1"
msg0=STRING|"Result = {res}"
msgcount=STRING|"1"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action13]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""FOLDER_TO_CALC"""
Params=FOLDER
[Actions\Action13\Params]
varname=STRING|"FOLDER_TO_CALC"
[Actions\Action14]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""TOTALSIZE"""
Params=FOLDER
[Actions\Action14\Params]
varname=STRING|"TOTALSIZE"
[Actions\Action15]
ActionID=STRING|"A_VARIABLES_REMOVE"
Enabled=INTEGER|-1
Name=STRING|"Remove variable ""FILECOUNT"""
Params=FOLDER
[Actions\Action15\Params]
varname=STRING|"FILECOUNT"
[Actions\Action2]
ActionID=STRING|"A_FLOW_IF"
Enabled=INTEGER|-1
Name=STRING|"If Then"
Params=FOLDER
[Actions\Action2\Params]
case=STRING|"0"
operator=STRING|"0"
type=STRING|"0"
value1=STRING|"{folder_to_calc}"
value2=STRING|"none"
[Actions\Action3]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""You haven't chosen the folder"""
Params=FOLDER
[Actions\Action3\Params]
icon=STRING|"1"
msg0=STRING|"You haven't chosen the folder"
msgcount=STRING|"1"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action4]
ActionID=STRING|"A_FLOW_ELSE"
Enabled=INTEGER|-1
Name=STRING|"Else"
[Actions\Action5]
ActionID=STRING|"BASIC_SCRIPT"
Enabled=INTEGER|-1
Name=STRING|"Basic Script"
Params=FOLDER
[Actions\Action5\Params]
line00000=STRING|"Public Const MAX_PATH = 260"
line00001=STRING|"Public Const FILE_ATTRIBUTE_DIRECTORY = &H10"
line00003=STRING|"Public Type FILETIME"
line00004=STRING|" dwLowDateTime As Long"
line00005=STRING|" dwHighDateTime As Long"
line00006=STRING|"End Type"
line00008=STRING|"Public Type WIN32_FIND_DATA"
line00009=STRING|" dwFileAttributes As Long"
line00010=STRING|" ftCreationTime As FILETIME"
line00011=STRING|" ftLastAccessTime As FILETIME"
line00012=STRING|" ftLastWriteTime As FILETIME"
line00013=STRING|" nFileSizeHigh As Long"
line00014=STRING|" nFileSizeLow As Long"
line00015=STRING|" dwReserved0 As Long"
line00016=STRING|" dwReserved1 As Long"
line00017=STRING|" cFileName As String * MAX_PATH"
line00018=STRING|" cAlternate As String * 14"
line00019=STRING|"End Type"
line00021=STRING|"Public Declare Function FindClose Lib ""kernel32"" Alias ""FindClose"" (ByVal hFindFile As Long) As Long"
line00022=STRING|"Public Declare Function FindFirstFile Lib ""kernel32"" Alias ""FindFirstFileA"" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long"
line00023=STRING|"Public Declare Function FindNextFile Lib ""kernel32"" Alias ""FindNextFileA"" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long"
line00025=STRING|"Dim FileCount As Long"
line00026=STRING|"Dim TotalSize As Double"
line00028=STRING|"Sub CalcFolder(ByVal AFolder As String)"
line00029=STRING|" Dim sh As Long"
line00030=STRING|" Dim FindData As WIN32_FIND_DATA"
line00031=STRING|" Dim res As Long"
line00032=STRING|" Dim FileName As String"
line00034=STRING|" sh = FindFirstFile(AFolder+""\*.*"", FindData)"
line00035=STRING|" If sh>=0 Then"
line00036=STRING|" res = 1"
line00037=STRING|" While res>0"
line00039=STRING|" FileName = Left(FindData.cFileName, InStr(FindData.cFileName,Chr(0))-1) 'because FindData.cFileName always containt 260 chars"
line00041=STRING|" If (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then 'file"
line00042=STRING|" FileCount = FileCount + 1"
line00043=STRING|" TotalSize = TotalSize + FindData.nFileSizeLow"
line00044=STRING|" Else 'directory"
line00045=STRING|" If FileName <> ""."" And FileName <> "".."" Then ' !!!important!!! skip ""."" and "".."" pseudofolders"
line00046=STRING|" CalcFolder(AFolder + ""\"" + FileName)"
line00047=STRING|" End If"
line00048=STRING|" End If"
line00049=STRING|" res = FindNextFile(sh,FindData)"
line00050=STRING|" Wend"
line00051=STRING|" FindClose(sh)"
line00052=STRING|" End If"
line00053=STRING|"End Sub"
line00055=STRING|"Sub Main"
line00056=STRING|" Dim s As String"
line00057=STRING|" FileCount=0"
line00058=STRING|" TotalSize=0"
line00059=STRING|" s = RoboTaskApp.ExpandText(""{Folder_To_Calc}"")"
line00060=STRING|" CalcFolder(s)"
line00061=STRING|" RoboTaskApp.SetUserVariable(""FileCount"", Str(FileCount))"
line00062=STRING|" RoboTaskApp.SetUserVariable(""TotalSize"", Str(TotalSize))"
line00063=STRING|"End Sub"
linecount=STRING|"64"
source=STRING|"0"
[Actions\Action6]
ActionID=STRING|"A_DIALOG_MESSAGE"
Enabled=INTEGER|-1
Name=STRING|"Show ""Folder ""{Folder_To_Calc}"" contains """
Params=FOLDER
[Actions\Action6\Params]
icon=STRING|"1"
msg0=STRING|"Folder ""{Folder_To_Calc}"" contains "
msg1=STRING|"{FileCount} files"
msg2=STRING|"{TotalSize} bytes"
msgcount=STRING|"3"
playsound=STRING|"0"
showmessage=STRING|"1"
[Actions\Action7]
ActionID=STRING|"A_FLOW_ENDIF"
Enabled=INTEGER|-1
Name=STRING|"End If"
[Actions\Action8]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""VAR1"" with value ""{TotalSize}"""
Params=FOLDER
[Actions\Action8\Params]
expand=STRING|"1"
varkind=STRING|"1"
varname=STRING|"VAR1"
varvalue=STRING|"{TotalSize}"
[Actions\Action9]
ActionID=STRING|"A_VARIABLES_CREATE"
Enabled=INTEGER|-1
Name=STRING|"Create local variable ""VAR2"" with value ""1048576"""
Params=FOLDER
[Actions\Action9\Params]
expand=STRING|"1"
varkind=STRING|"1"
varname=STRING|"VAR2"
varvalue=STRING|"1048576"
Oleg Yershov
Rukbunker
Posts: 218 Joined: Mon Feb 22, 2016 4:06 pm
Location: Netherlands
Post
by Rukbunker » Tue Aug 28, 2018 4:06 pm
Thanks for the quick reply. It works.
Can I round the number inthe result somehow to a 2-number digit, like xx,yy? (
Like this )
Oleg
Site Admin
Posts: 3201 Joined: Thu Jan 01, 1970 1:00 am
Contact:
Post
by Oleg » Tue Aug 28, 2018 4:30 pm
Can I round the number inthe result somehow to a 2-number digit, like xx,yy?
Yes, change the expression in step #11 to this:
Round({var1}.0/{var2},2)
Oleg Yershov
Rukbunker
Posts: 218 Joined: Mon Feb 22, 2016 4:06 pm
Location: Netherlands
Post
by Rukbunker » Tue Aug 28, 2018 4:56 pm
Great. I will try it tomorrow. Thanks!