내가 가진 :NSIS RMDir을 하위 디렉토리로 작동시키는 방법은 무엇입니까? NSIS 설치 스크립트에서
RMDir "$INSTDIR"
을 이제 사용자가 C:\Program Files\Product
에 설치 디렉토리를 설정하면, 그들이 예를 들어 C:\Program Files\Company\Product
로, 깊은 뭔가 설치하지만 경우에, 잘 작동, RMDIR는 못된 "Product"는 제외하고 "Company"는 제외합니다. 어떻게 내가 루트 디렉토리 (/ r을 사용하지 않고)까지 빈 디렉토리를 삭제할 수 있습니까? 비어있는 경우 제품 삭제, 비어있는 경우 회사 삭제, 비어있는 경우 프로그램 파일 삭제, 등등?
편집 : 내가 사용하여 종료 기능 :
# Delete empty directories recursively
var deleteDir
var dirLength
Function un.PathDeleteEmptyDirRecurse
ClearErrors
loop:
Sleep 50 ; Without a small delay here, the directory sometimes won't get removed
RMDir "$deleteDir" ; Remove the directory
IfErrors end
strlen $dirLength $deleteDir ; Store the length of the path
intcmp $dirLength 3 end end ; If the length of the path is <= 3 (e.g. C:\), we're at the root drive
GetFullPathName $deleteDir "$deleteDir\.." ; <path>\.. results in the parent directory of <path>
IfErrors end loop
end:
FunctionEnd
감사합니다. 한 가지를 제외하면이 기능은 훌륭합니다. 두 번 연속해서 호출하는 방법은 무엇입니까? 'push $ instdir1 \ call un.PathDeleteEmptyDirRecurse \ push $ instdir2 \ call un.PathDeleteEmptyDirRecurse' (줄 바꿈을 시뮬레이트하기 위해 \ 사용)가 작동하지 않습니다. –
@ Jake Petroules : 시도 할 때 잘 작동합니다. http://nsis.pastebin.com/5JgDwcEH (트리의 _deepest_ 폴더에서 시작해야합니다.) – Anders
가장 깊은 폴더에서 시작하고 있습니다. 아주 당황 스럽습니다. 이것은 내 NSIS 스크립트에서 가지고 있습니다 : http://nsis.pastebin.com/1scSjsgM –