В сценарии установщика NSIS у меня есть:
RMDir "$INSTDIR"
Теперь, если пользователь устанавливает каталог установки на C:\Program Files\Product
, он работает нормально, однако, если они устанавливают что-то более глубокое, например, C:\Program Files\Company\Product
, RMDir удаляет «Продукт», но не «Компания». Как я могу заставить его удалить каждый пустой каталог до корня (БЕЗ использования / 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