Time difference between two files - ${FileTimeDiff}
I thought maybe this can be useful to some.. works great for me.
ex.: ${FileTimeDiff} "${SAVEDIR}\${FILETOCHECK}" "${BKPDIR}${BKPNUM}\${FILETOCHECK}" $0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
define FileTimeDiff "!insertmacro _FileTimeDiff"
;; Get the difference between two file times
>;; P1 :i: File name A.
;;P2 :i: File name B.
;;P3 :o: Number of seconds between the two files, can be negative of positive
>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!
>!macro _FileTimeDiff _File1_ _File2_ _Diff_
Push$0 ;; File Search Handle / File Time (UTC) (100 ns unit, 64bit int)
Push $3 ;; File Info (struct) / File-2 Time (UTC) (Seconds)
Push $4 ;; File-1 Time (UTC) (Seconds)
System::Call '*(i, l, l, l, i, i, i, i, &t260, &t14) i .r3' ;; Create WIN32_FIND_DATA Struct
!insertmacro ___FileTimeUTCSeconds "${_File1_}" ;; Get File1 UTC Time in Seconds
Pop$4
!insertmacro ___FileTimeUTCSeconds "${_File2_}" ;; Get File2 UTC Time in Seconds
Pop$3
System::Int64Op $4 - $3 ;; Calculate File Time Difference
Pop$0
_ftdexit:
Pop $4
Pop$3
Exch$0
Pop${_Diff_}
!macroend
>!macro ___FileTimeUTCSeconds _File_
System::Call 'kernel32::FindFirstFileA(t, i) i("${_File_}", r3) .r0' ;; Find file info
IntCmp$0 -1 0 0 +4 ;; if handle <= -1 : not ok
Push ""
Pop $0
Goto _ftdexit ;; do not even check the other file
>;; Else (valid handle)
System::Call 'kernel32::FindClose(i) i(r0)' ;; Close file search
System::Call '*$3(i, l, l, l, i, i, i, i, &t260, &t14) i (,,, .r0)' ;; Get File time
System::Int64Op $0 / 10000000 ;; Conversion From '100 ns' >TO> '1 sec' unit
>!macroend
>;
Just began nsis scripting about a month ago, so feel free to suggest a better coding for this. ;)
.