Sign in to follow this  
Followers 0
jslegers

Script can't calculate anymore

3 posts in this topic

#1 ·  Posted (edited)

Hello,

This is the third time my script is playing tricks on me. Here's the script.

#include <Date.au3>

; Setting autoit options
AutoItSetOption ( "TrayMenuMode", 1 )
HotKeySet ( "#{ESC}", "Quit" )

If IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "TrayIcon", 1 ) = 0 Then
    TraySetState ( 2 )
Else
    TraySetState ( 1 )
EndIf

If IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "Optimize", 1 ) = 0 Then
    $Opt = 2
Else
    $Opt = 3
EndIf

; Determing language and setting variables
If @OSLang = 0409 Then
    $StartAn = "Starting analyze of fragmentation at "
    $Analy = "Analyzing "
    $Start = "Starting defragmentation of "
    $Defrag = "Defragmenting "
    $NoDefrag = "No defragmentation needed for "
    $Drive = " drive."
ElseIf @OSLang = 0413 Then
    $StartAn = "Start met de analyse van de fragmentatie om "
    $Analy = "Analiseren van de "
    $Start = "Starten van defragmenteren "
    $Defrag = "Defragmenteren van de "
    $NoDefrag = "Geen defragmentatie nodig van "
    $Drive = " schijf."
EndIf

$Varfragini = IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "FragmentedFiles", 100 )
$Vartimeini = IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "Timeout", 5 )
;ConsoleWrite($Vartimeini & @LF)

; Adding x minutes to the current time
$sTime = _DateAdd ( 'n', $Vartimeini, _NowCalc())
$sNewTime = _DateTimeFormat ( $sTime, 4 )

; Setting Tray Icons options.
TraySetToolTip ( $StartAn & $sNewTime )

; Waiting for x minutes.
Sleep ( $Vartimeini * 60000 )

$Vardrive = DriveGetDrive( "FIXED" )
If NOT @error Then
    For $i = 1 to $Vardrive[0]
; Analyzing drive.
        TrayTip ( "", $Analy & StringUpper ( $Vardrive[$i] ) & $Drive, 3, 1 )
        $JkDefragCom = "C:\Program Files\Defrag\JkDefragCmd.exe" 
        $JkParam = "-a 1 -l C:\Analyze_" & StringUpper ( StringTrimRight ( $Vardrive[$i], 1 )) & ".log " & $Vardrive[$i]
        ShellExecuteWait ( $JkDefragCom, $JkParam,  "", "", @SW_HIDE )
        $Log = FileReadLine ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" ,18 )
        $Ret = StringRegExp($Log, ": ([0-9]{0,})", 1, 1)
;FileDelete ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" )
        ConsoleWrite($Ret[0] & @LF)
        If $Ret[0] > $Varfragini Then
    ; Starting defragmentation of drive.
            TrayTip ( "", $Start & StringUpper ( $Vardrive[$i] ) & $Drive, 3, 1 )
            Sleep ( 3000 )
            TrayTip ( "", "", 0 )
            TraySetToolTip ( $Defrag & StringUpper ( $Vardrive[$i] ) & $Drive )
            $JkParam = "-a " & $Opt & " -d 1 -s 100 -f 1 -l C:\Defrag_" & StringUpper ( StringTrimRight ( $Vardrive[$i], 1 )) & ".log " & $Vardrive[$i]
            ShellExecuteWait ( $JkDefragCom, $JkParam, "", "",  @SW_HIDE )
        Else
            TrayTip ( "Status", $NoDefrag & StringUpper ( $Vardrive[$i] ) & $Drive, 10, 1 )
            Sleep ( 3000 )
        EndIf
    Next
EndIf

; Function Quit to stop the script.
Func Quit()
    ProcessClose ( "JkDefragCmd.exe" )
    Exit
EndFunc

Here is the ini file :

[General]

FragmentedFiles=500

Timeout=0

TrayIcon=1

Optimize=1

And here is a piece of the analyze log file :

15:54:34 JkDefrag v3.36

15:54:34 Date: 2008/09/12

15:54:34 Windows version: v5.1 build 2600 Service Pack 3

15:54:34 Commandline argument '-a' accepted, optimizemode = 1

15:54:34 Commandline argument '-l' accepted, logfile = C:\Analyze_C.log

15:54:34 NtfsDisableLastAccessUpdate is active, ignoring LastAccessTime for SpaceHogs.

15:54:34 Processing 'c:'

15:54:34 Opening volume '\\?\Volume{e8f1f9b1-60cc-11dd-b040-806d6172696f}' at mountpoint 'c:'

15:54:34 Input mask: c:\*

15:54:35 Phase 1: Analyze

15:54:35 This is an NTFS disk.

15:54:45 Finished.

15:54:45 - Total disk space: 34356477952 bytes (31.9970 gigabytes), 8387812 clusters

15:54:45 - Bytes per cluster: 4096 bytes

15:54:45 - Number of files: 89795

15:54:45 - Number of directories: 5286

15:54:45 - Total size of analyzed items: 15630741504 bytes (14.5573 gigabytes), 3816099 clusters

15:54:45 - Number of fragmented items: 1827 (1.9215% of all items)

My script checks by the ini file if this drive has to be defragmented. As you can see the number of fragmented items = 1827. In the ini file there is a limit of 500. So in the script it says If 1827 > 500 then defrag. But this doesn't work. If the value is below 1000 say 600 than I runs fine. Why does it has problems with numbers bigger than 1000 ?

Could this line be faulty

$Log = FileReadLine ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" ,18 )
$Ret = StringRegExp($Log, ": ([0-9]{0,})", 1, 1)

JkDefragCmd.exe

Edited by jslegers

Share this post


Link to post
Share on other sites



Hello,

This is the third time my script is playing tricks on me. Here's the script.

#include <Date.au3>

; Setting autoit options
AutoItSetOption ( "TrayMenuMode", 1 )
HotKeySet ( "#{ESC}", "Quit" )

If IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "TrayIcon", 1 ) = 0 Then
    TraySetState ( 2 )
Else
    TraySetState ( 1 )
EndIf

If IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "Optimize", 1 ) = 0 Then
    $Opt = 2
Else
    $Opt = 3
EndIf

; Determing language and setting variables
If @OSLang = 0409 Then
    $StartAn = "Starting analyze of fragmentation at "
    $Analy = "Analyzing "
    $Start = "Starting defragmentation of "
    $Defrag = "Defragmenting "
    $NoDefrag = "No defragmentation needed for "
    $Drive = " drive."
ElseIf @OSLang = 0413 Then
    $StartAn = "Start met de analyse van de fragmentatie om "
    $Analy = "Analiseren van de "
    $Start = "Starten van defragmenteren "
    $Defrag = "Defragmenteren van de "
    $NoDefrag = "Geen defragmentatie nodig van "
    $Drive = " schijf."
EndIf

$Varfragini = IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "FragmentedFiles", 100 )
$Vartimeini = IniRead ( @ScriptDir & "\" & "Defrag.ini", "General", "Timeout", 5 )
;ConsoleWrite($Vartimeini & @LF)

; Adding x minutes to the current time
$sTime = _DateAdd ( 'n', $Vartimeini, _NowCalc())
$sNewTime = _DateTimeFormat ( $sTime, 4 )

; Setting Tray Icons options.
TraySetToolTip ( $StartAn & $sNewTime )

; Waiting for x minutes.
Sleep ( $Vartimeini * 60000 )

$Vardrive = DriveGetDrive( "FIXED" )
If NOT @error Then
    For $i = 1 to $Vardrive[0]
; Analyzing drive.
        TrayTip ( "", $Analy & StringUpper ( $Vardrive[$i] ) & $Drive, 3, 1 )
        $JkDefragCom = "C:\Program Files\Defrag\JkDefragCmd.exe" 
        $JkParam = "-a 1 -l C:\Analyze_" & StringUpper ( StringTrimRight ( $Vardrive[$i], 1 )) & ".log " & $Vardrive[$i]
        ShellExecuteWait ( $JkDefragCom, $JkParam,  "", "", @SW_HIDE )
        $Log = FileReadLine ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" ,18 )
        $Ret = StringRegExp($Log, ": ([0-9]{0,})", 1, 1)
;FileDelete ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" )
        ConsoleWrite($Ret[0] & @LF)
        If $Ret[0] > $Varfragini Then
; Starting defragmentation of drive.
            TrayTip ( "", $Start & StringUpper ( $Vardrive[$i] ) & $Drive, 3, 1 )
            Sleep ( 3000 )
            TrayTip ( "", "", 0 )
            TraySetToolTip ( $Defrag & StringUpper ( $Vardrive[$i] ) & $Drive )
            $JkParam = "-a " & $Opt & " -d 1 -s 100 -f 1 -l C:\Defrag_" & StringUpper ( StringTrimRight ( $Vardrive[$i], 1 )) & ".log " & $Vardrive[$i]
            ShellExecuteWait ( $JkDefragCom, $JkParam, "", "",  @SW_HIDE )
        Else
            TrayTip ( "Status", $NoDefrag & StringUpper ( $Vardrive[$i] ) & $Drive, 10, 1 )
            Sleep ( 3000 )
        EndIf
    Next
EndIf

; Function Quit to stop the script.
Func Quit()
    ProcessClose ( "JkDefragCmd.exe" )
    Exit
EndFunc

Here is the ini file :

[General]

FragmentedFiles=500

Timeout=0

TrayIcon=1

Optimize=1

And here is a piece of the analyze log file :

15:54:34 JkDefrag v3.36

15:54:34 Date: 2008/09/12

15:54:34 Windows version: v5.1 build 2600 Service Pack 3

15:54:34 Commandline argument '-a' accepted, optimizemode = 1

15:54:34 Commandline argument '-l' accepted, logfile = C:\Analyze_C.log

15:54:34 NtfsDisableLastAccessUpdate is active, ignoring LastAccessTime for SpaceHogs.

15:54:34 Processing 'c:'

15:54:34 Opening volume '\\?\Volume{e8f1f9b1-60cc-11dd-b040-806d6172696f}' at mountpoint 'c:'

15:54:34 Input mask: c:\*

15:54:35 Phase 1: Analyze

15:54:35 This is an NTFS disk.

15:54:45 Finished.

15:54:45 - Total disk space: 34356477952 bytes (31.9970 gigabytes), 8387812 clusters

15:54:45 - Bytes per cluster: 4096 bytes

15:54:45 - Number of files: 89795

15:54:45 - Number of directories: 5286

15:54:45 - Total size of analyzed items: 15630741504 bytes (14.5573 gigabytes), 3816099 clusters

15:54:45 - Number of fragmented items: 1827 (1.9215% of all items)

My script checks by the ini file if this drive has to be defragmented. As you can see the number of fragmented items = 1827. In the ini file there is a limit of 500. So in the script it says If 1827 > 500 then defrag. But this doesn't work. If the value is below 1000 say 600 than I runs fine. Why does it has problems with numbers bigger than 1000 ?

Could this line be faulty

$Log = FileReadLine ( "C:\Analyze_" & StringTrimRight ( $Vardrive[$i], 1 ) & ".log" ,18 )
$Ret = StringRegExp($Log, ": ([0-9]{0,})", 1, 1)
The problem is probably because the values you are comparing are strings.

Try this.

If number($Ret[0]) > number($Varfragini) Then

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning."- Rick Cook

Share this post


Link to post
Share on other sites

Thanks that did the trick. :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0