Delete dirs / files in a directory except one dir / file
From NSIS Wiki
Jump to navigationJump to search
Author: Afrow UK (talk, contrib) |
RmDirsButOne (Dirs)
This first function will delete all subdirectories in a directory except one directory.
Usage
Push "main dir path" Push "dir to exclude" Call RmDirsButOne
The Function
Function RmDirsButOne Exch $R0 ; exclude dir Exch Exch $R1 ; route dir Push $R2 Push $R3 ClearErrors FindFirst $R3 $R2 "$R1\*.*" IfErrors Exit Top: StrCmp $R2 "." Next StrCmp $R2 ".." Next StrCmp $R2 $R0 Next IfFileExists "$R1\$R2\*.*" 0 Next RmDir /r "$R1\$R2" #Goto Exit ;uncomment this to stop it being recursive (delete only one dir) Next: ClearErrors FindNext $R3 $R2 IfErrors Exit Goto Top Exit: FindClose $R3 Pop $R3 Pop $R2 Pop $R1 Pop $R0 FunctionEnd
RmFilesButOne (Files)
This second function will delete all files in a directory except one file.
Usage
Push "main dir path" Push "file to exclude" Call RmFilesButOne
The Function
Function RmFilesButOne Exch $R0 ; exclude file Exch Exch $R1 ; route dir Push $R2 Push $R3 FindFirst $R3 $R2 "$R1\*.*" IfErrors Exit Top: StrCmp $R2 "." Next StrCmp $R2 ".." Next StrCmp $R2 $R0 Next IfFileExists "$R1\$R2\*.*" Next Delete "$R1\$R2" #Goto Exit ;uncomment this to stop it being recursive (delete only one file) Next: ClearErrors FindNext $R3 $R2 IfErrors Exit Goto Top Exit: FindClose $R3 Pop $R3 Pop $R2 Pop $R1 Pop $R0 FunctionEnd
-Stu (Afrow UK)