내 게임의 NSIS에 설치 프로그램/제거 프로그램을 작성하고 있습니다. 내 게임은 사용자 지정 모드를 지원하며 사용자가 개조하지 않을 때마다 사용자 지정 모드를 삭제할 때마다 옵션을 제공하려고합니다. 이제 까다로운 부분이 있습니다 : 개조자는 $INSTDIR
의 하위 디렉토리에 있습니다. 그래서 사용자가 보관해야 할 mods가 있다면, 그 submod 디렉토리 옆에있는 모든 것을 지우고 싶습니다 (그래서 저는 평범한 old 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/모듈 디렉토리를 떠나 다른 모든 삭제) 어떤 만 파일을 삭제에 대해
내 모든 자산은 일반 데이터 (png/ogg/xml)로 저장되므로 많은 개인을 만들 수있다. 설치할 파일. 제거 중에도 삭제해야 할 파일을 추가 할 수있는 패치는 말할 것도 없습니다. 그리고 진짜 제거는 너무 mod 파일을 삭제하는 옵션을 제공합니다, 나는 그/그녀가 다양한 인터넷 소스에서 수집 할지도 모르고/다른 컴퓨터로 옮길 수있는 파일의 자동 삭제 강제로 사용자를 귀찮게하고 싶지 않다. – PiotrK
그런 다음 백업 mods 폴더 $ TEMP 디렉토리에, RMDir/r로 모든 것을 삭제하고 폴더를 다시 복사/생성하십시오. – Slappy