卸载时保留用户文件夹

 

;软件的使用过程,会产生一些由用户产生的数据,而软件卸载时,用户往往不希望卸载这些文件。
;以下实现了卸载除指定文件夹,文件以外的所有文件。
;
;delete dirs except one
;
Function un.RmDirsButSome
        ; exclude dir
        Exch $R0 
        Exch 1
        Exch $R1
        Exch 2
        Exch $R2
        Exch 3
        Exch $R3
        Exch 4
        Exch $R4

        ; route dir
        Exch 5
        Exch $R5
        Push $R6
        Push $R7

        ClearErrors
        FindFirst $R7 $R6 "$R5/*.*"
        IfErrors Exit

        Top:
        StrCmp $R6 "." Next
        StrCmp $R6 ".." Next
        StrCmp $R6 $R0 Next
        StrCmp $R6 $R1 Next
        StrCmp $R6 $R2 Next
        StrCmp $R6 $R3 Next
        StrCmp $R6 $R4 Next

        ;delete file or rm dir
        IfFileExists "$R5/$R6/*.*" IsDir IsFile
        IsDir:
        RmDir /r "$R5/$R6"
        IsFile:
        IfFileExists "$R5/$R6" 0 Next
        delete "$R5/$R6"
       #Goto Exit ;uncomment this to stop it being recursive (delete only one dir)

        Next:
        ClearErrors
        FindNext $R7 $R6
        IfErrors Exit
        Goto Top

        Exit:
        FindClose $R7

        Pop $R7
        Pop $R6
        Pop $R5
        Pop $R4
        Pop $R3
        Pop $R2
        Pop $R1
        Pop $R0
FunctionEnd
;
;删除除指定文件夹以外的文件宏
;还没有找到怎么实现不定参数的宏,这个实现只能保留最多五个文件或者文件夹,如果想保留更多的文件或者文件夹可以参照实现
;
;path--软件的安装路径
;path1--用户指定的保留文件夹或者文件
;path2--用户指定的保留文件夹或者文件
;path3--用户指定的保留文件夹或者文件
;path4--用户指定的保留文件夹或者文件
;path5--用户指定的保留文件夹或者文件
;
!macro RmDirsButSome path path1 path2 path3 path4 path5
        push ${path}
        push ${path1}
        push ${path2}
        push ${path3}
        push ${path4}
        push ${path5}
        call un.RmDirsButSome
!macroend
;
;调用,在卸载字段插入宏
;
!insertmacro RmDirsButSome $INSTDIR userItemlib userImage "other" "other" "other"
 
注意:
1. Function un.RmDirsButSome 这个函数是以un.funcname的方式命名的,因为函数是在卸载区段调用,只能是 un.开关;
2.找不到不定参数的宏,没能实现保留任意多个文件或者文件夹,如有需要可以对脚本进行修改;
3.实现参考了官方wiki的实现

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值