Code: Select all
#NoEnv
#SingleInstance force
#Persistent
nameBUT := StrSplit("SALES|Cashing|Button3|Button4|Button5|Button6|DocFiles|PdfFiles", "|")
Gui Add, ListBox, w650 r10 vfiles1, % "Dir1 = " dir1 "| |" list1
Gui Add, ListBox, xm w650 r10 vfiles2, % "Dir2 = " dir2 "| |" list2
Gui Add, Button, w75 gGuiOK default, Exit
Gui,Add, Text, yp+5 x100,Dir1
Gui,Add, Edit, yp-3 x130 w200 vDir1,%dir1%
Gui,Add, Text, yp+2 x340,Dir2
Gui,Add, Edit, yp-3 x365 w200 vDir2,%dir2%
Gui,Add, Text, yp+2 x575,Mask
Gui,Add, Edit, yp-3 x605 w75 vFileMask,%fileMask%
Gui Add, Button, yp x685 w75 gGo, Go
Gosub, AddRightSideButtons
Gui Show, w775
Return
AddRightSideButtons:
GuiControlGet, ctl, Pos, files1
x := ctlX + ctlW + 10
Gui, Add, Button, x%x% y%ctlY% w90 h28 gBUT, % nameBUT[1]
Loop, 7
Gui, Add, Button, wp hp gBUT, % nameBUT[A_index+1]
return
Go:
Gui, Submit, NoHide
gosub, DoTheWork
GuiControl,,files1,% "|Dir1 = " dir1 "| |" list1
GuiControl,,files2,% "|Dir2 = " dir2 "| |" list2
return
BUT:
If (A_GuiControl=nameBUT[1]){
ControlSetText, Edit1, % "E:\ask\work"
ControlSetText, Edit2, % "E:\ask\backup"
}
Else
If (A_GuiControl=nameBUT[2]){
ControlSetText, Edit1,% "E:\ask\sales"
ControlSetText, Edit2, % "E:\ask\work"
}
Else
If (A_GuiControl=nameBUT[7]){
ControlSetText, Edit3, *.docx
ControlClick, Go, Comp
}
Else
If (A_GuiControl=nameBUT[8]){
ControlSetText, Edit3, *.pdf
ControlClick, Go, Go
}
Else
Msgbox % "NONE!!" A_GuiControl
return
GuiOK:
GuiClose:
GuiEscape:
ExitApp
DoTheWork:
filelist1 := filelist2 := ""
list1 := list2 := ""
fnb1 := fnb2 := 0 ; <<<<< added: initialize the counters
Loop %dir1%\%fileMask%
{
If ( A_LoopFileName ~= "~\$")
continue
fileList1 .= A_LoopFileName . "`n"
fnb1++ ; <<<<< changed: don't use A_Index because some files may be skipped
}
StringTrimRight fileList1, fileList1, 1
Loop %dir2%\%fileMask%
{
If ( A_LoopFileName ~= "~\$")
continue
fileList2 .= A_LoopFileName . "`n"
fnb2++ ; <<<<< changed: don't use A_Index because some files may be skipped
}
StringTrimRight fileList2, fileList2, 1
If (fnb1 = 0) && (fnb2 = 0) ; <<<<< added: early return
Return
Sort fileList1
Sort fileList2
StringSplit files_1_, fileList1, `n
StringSplit files_2_, fileList2, `n
idxF1 := idxF2 := 1
Loop
{
If (idxF1 > fnb1) ; <<<<< moved to the top of the loop
{
Loop % fnb2 - idxF2 + 1
{
list1 .= " |" ; Empty
list2 .= files_2_%idxF2% . "|"
idxF2++
}
Break
}
If (idxF2 > fnb2) ; <<<<< moved to the top of the loop
{
Loop % fnb1 - idxF1 + 1
{
list1 .= files_1_%idxF1% . "|"
idxF1++
list2 .= " |" ; Empty
}
Break
}
If (files_1_%idxF1% = files_2_%idxF2%)
{
; We are in synch
list1 .= files_1_%idxF1% . "|"
idxF1++
list2 .= files_2_%idxF2% . "|"
idxF2++
}
Else
{
; Either file at idxF1 or at idxF3 is missing, we must find which one
If (files_1_%idxF1% > files_2_%idxF2%)
{
; Missing in first list
list1 .= " |" ; Empty
list2 .= files_2_%idxF2% . "|"
idxF2++
}
Else
{
; Missing in second list
list1 .= files_1_%idxF1% . "|"
idxF1++
list2 .= " |" ; Empty
}
}
}
StringTrimRight list1, list1, 1
StringTrimRight list2, list2, 1
Return