【发布时间】:2014-04-11 00:06:23
【问题描述】:
我正在为我的游戏在 NSIS 中编写安装程序/卸载程序。我的游戏支持自定义模组,我想在卸载期间删除自定义模组时提供一个选项。现在是棘手的部分:mods 被放在$INSTDIR 的子目录中。因此,如果用户要保留一些模组,我想删除该子模组目录旁边的所有内容(所以我不能使用普通的旧 RMdir /R)。
我要保留的文件是这种结构:
$INSTDIR/Modules/[anything-but-Base]
$INSTDIR/Modules/Base/Submod
例如,如果用户决定保留他的模组,我想保留目录:
$INSTDIR/Modules/Base/Submod/Sample1
$INSTDIR/Modules/Base/Submod/Sample2
$INSTDIR/Modules/Base/Submod
$INSTDIR/Modules/Sample3
$INSTDIR/Modules/Sample4
并从$INSTDIR 中删除所有其他内容,包括空目录
我尝试过这样做:
FindFirst $R0 $R1 "$INSTDIR\Modules\Base\*.*"
Loop:
StrCmp $R1 "" Done
StrCmp $R1 "Submod" DeleteSubMods
Goto DeleteCoreMod
DeleteSubMods:
RMdir "$INSTDIR/Modules/Base/Submod" ; Remove only if empty
Goto FindNextItem
DeleteCoreMod:
RMdir /R "$INSTDIR/Modules/Base/$R1" ; Remove always
FindNextItem:
FindNext $R0 $R1
Goto Loop
Done:
FindClose $0
RMdir "$INSTDIR/Modules/Base" ; Only if empty
RMdir "$INSTDIR/Modules" ; Only if empty
FindFirst $R0 $R1 "$INSTDIR\*.*"
Loop2:
StrCmp $R1 "" Done2
StrCmp $R1 "Modules" FindNextItem2 ; Remove everything but Modules
RMdir /R "$INSTDIR/$R1"
Delete "$INSTDIR/$R1"
FindNextItem2:
FindNext $R0 $R1
Goto Loop2
Done2:
FindClose $0
但这并没有让我得到正确的结果(它留下空的 $INSTDIR/Modules 目录并删除其他所有内容)
【问题讨论】:
标签: nsis