2014-04-09 1 views
0

내 게임의 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/모듈 디렉토리를 떠나 다른 모든 삭제) 어떤 만 파일을 삭제에 대해

답변

0

를? 내가 설치하는 동안 가정

당신이 무엇을 모든 파일을 하나의 B 하나) B에서

SetOutDir $INSTDIR 
File "1" 
File "2" 
File "3" 
File "4" 
File "n" 

의 목록을 만들기에 대한 같은)

SetOutDir $INSTDIR 
File "*.*" 

을 할) 경우는 제거 프로그램에 대해 동일한 목록을 작성 (제거 섹션에서). 파일 만 삭제되고 모드 파일은 변경되지 않습니다.

RMdir (/ r 제외)을 사용하면 디렉토리를 삭제할 수 있습니다. 완전히 비어있는 경우에만 삭제되므로 MOD가 보존됩니다.

그리고 마지막 질문 : 경기가없는 개조를하는 것은 쓸모가 있지 않습니까? 나는 그들이 일하지 않을 것이라고 생각한다. ...

+0

내 모든 자산은 일반 데이터 (png/ogg/xml)로 저장되므로 많은 개인을 만들 수있다. 설치할 파일. 제거 중에도 삭제해야 할 파일을 추가 할 수있는 패치는 말할 것도 없습니다. 그리고 진짜 제거는 너무 mod 파일을 삭제하는 옵션을 제공합니다, 나는 그/그녀가 다양한 인터넷 소스에서 수집 할지도 모르고/다른 컴퓨터로 옮길 수있는 파일의 자동 삭제 강제로 사용자를 귀찮게하고 싶지 않다. – PiotrK

+1

그런 다음 백업 mods 폴더 $ TEMP 디렉토리에, RMDir/r로 모든 것을 삭제하고 폴더를 다시 복사/생성하십시오. – Slappy