Reputation: 3678
I currently have a check to find all text files in $INSTDIR, shown below.
However, there could potentially be subdirectories, such as $INSTDIR\mySub, which contains additional .txt files. Is there a way to keep a similar loop structure but search all subdirectories as well?
FindFirst $R0 $R1 "$INSTDIR\*.txt"
IfErrors ExitInstaller 0
LoopIt:
Messagebox MB_OK "Do some processing on $R1"
FindNext $R0 $R1
IfErrors 0 LoopIt
Upvotes: 1
Views: 4360
Reputation: 101636
Function ProcessTextFiles
Exch $0
Push $1
Push $2
FindFirst $1 $2 "$0\*.txt"
loop:
IfErrors end
DetailPrint 'Found "$0\$2"'
FindNext $1 $2
goto loop
end:
FindClose $1
FindFirst $1 $2 "$0\*.*"
dirloop:
IfErrors dirend
IfFileExists "$0\$2\*.*" 0 dirnext
StrCmp $2 "." dirnext
StrCmp $2 ".." dirnext
Push "$0\$2"
call ${__FUNCTION__}
dirnext:
FindNext $1 $2
goto dirloop
dirend:
FindClose $1
Pop $2
Pop $1
Pop $0
FunctionEnd
section
push "$InstDir"
call ProcessTextFiles
sectionend
Upvotes: 2
Reputation: 19817
Try to use the Locate
function instead -- it could be much better solution. You can write options to find with (or without) subdirectories, define mask and so on. See http://nsis.sourceforge.net/Locate for doc and examples.
Upvotes: 1