MakeRecurentFileList
From NSIS Wiki
Jump to navigationJump to search
Author: Zanir (talk, contrib) |
Description
Create file list with relative paths of files in a directory. It is possible to define output file, filter, local and global folder. Local folder and rest path with filename are saved to output file. Global folder is not saved.
Usage
!define UNINSTALL_MAP "uninstall.txt" Delete "$INSTDIR\${UNINSTALL_MAP}" ; delete output file if exist, there is used append mode Push "$INSTDIR\${UNINSTALL_MAP}" ; output file Push ".pdf" ; filter (only files which has this string in filename are added) Push "Doc" ; local folder Push "$EXEDIR" ; global folder Call MakeRecurrentFileList
The Function
!include "StrContains.nsh" ; http://nsis.sourceforge.net/StrContains Function MakeRecurrentFileList Pop $R3 ; global folder Pop $R2 ; local folder Pop $R1 ; filter Pop $R0 ; output file ClearErrors FindFirst $R4 $R5 "$R3\$R2\*.*" MakeRecurrentFileList_Loop: IfErrors MakeRecurrentFileList_Done ; check if it is folder IfFileExists "$R3\$R2\$R5\*.*" 0 MakeRecurrentFileList_file ; directory StrCmp $R5 "." MakeRecurrentFileList_next ; skip current folder StrCmp $R5 ".." MakeRecurrentFileList_next ; skip parent folder ; go Recurrent ; save current variables Push $R5 Push $R4 Push $R3 Push $R2 Push $R1 Push $R0 ; set parameters Push $R0 ; output file Push $R1 ; filter Push "$R2\$R5" ; local folder Push $R3 ; global folder call MakeRecurrentFileList ; restore current variables Pop $R0 Pop $R1 Pop $R2 Pop $R3 Pop $R4 Pop $R5 Goto MakeRecurrentFileList_next MakeRecurrentFileList_file: ; use filter ${StrContains} $0 $R1 $R5 StrCmp $0 "" MakeRecurrentFileList_notfound ; filter found, add file to list FileOpen $R6 $R0 a FileSeek $R6 0 END FileWrite $R6 "$R2\$R5$\r$\n" FileClose $R6 MakeRecurrentFileList_notfound: MakeRecurrentFileList_next: ClearErrors FindNext $R4 $R5 Goto MakeRecurrentFileList_Loop MakeRecurrentFileList_Done: FindClose $R4 FunctionEnd