Files
2026-07-13 13:03:09 +08:00

151 lines
4.7 KiB
Batchfile
Executable File

@echo off
setlocal EnableExtensions EnableDelayedExpansion
:: ========================================================
:: CONFIG
:: ========================================================
set "APP_NAME=ebook2audiobook"
set "SCRIPT_DIR=%~dp0"
set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
set "REAL_INSTALL_DIR=%SCRIPT_DIR%"
set "SCRIPT_NAME=%~nx0"
set "STARTMENU_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\%APP_NAME%"
set "DESKTOP_LNK=%USERPROFILE%\Desktop\%APP_NAME%.lnk"
set "INSTALLED_LOG=%SCRIPT_DIR%\.installed"
set "CONDA_HOME=%USERPROFILE%\Miniforge3"
set "CONDA_PATH=%CONDA_HOME%\condabin"
:: Honor SCOOP env var if set, otherwise default user-install location
if defined SCOOP (set "SCOOP_HOME=%SCOOP%") else (set "SCOOP_HOME=%USERPROFILE%\scoop")
:: ========================================================
echo ========================================================
echo %APP_NAME% Uninstaller
echo ========================================================
echo Install location:
echo %REAL_INSTALL_DIR%
echo.
:: ========================================================
:: USER CONFIRMATION
:: ========================================================
echo ========================================================
echo This will uninstall %APP_NAME%.
echo Components listed in .installed will be removed.
echo.
echo Press a key to continue . . .
echo ========================================================
pause >nul
echo.
:: ========================================================
:: TERMINATE APP PROCESS ONLY
:: ========================================================
tasklist | find /i "%APP_NAME%.exe" >nul && (
echo Terminating %APP_NAME%.exe
taskkill /IM "%APP_NAME%.exe" /F >nul 2>&1
)
:: ========================================================
:: PROCESS .installed (CONTROLLED REMOVAL)
:: ========================================================
set "REMOVE_CONDA="
set "REMOVE_SCOOP="
if exist "%INSTALLED_LOG%" (
for /f "usebackq delims=" %%A in ("%INSTALLED_LOG%") do (
if /i "%%A"=="Miniforge3" set "REMOVE_CONDA=1"
if /i "%%A"=="Scoop" set "REMOVE_SCOOP=1"
)
)
:: ========================================================
:: DETACH FROM CONDA (SAFETY)
:: ========================================================
if defined REMOVE_CONDA (
set "CONDA_SHLVL="
set "CONDA_DEFAULT_ENV="
set "CONDA_PREFIX="
set "PATH=%SystemRoot%\System32;%SystemRoot%"
)
:: ========================================================
:: REMOVE MINIFORGE (FAST, ATOMIC)
:: ========================================================
if defined REMOVE_CONDA if exist "%CONDA_HOME%" (
echo %CONDA_HOME%
rd /s /q "%CONDA_HOME%" >nul 2>&1
)
:: ========================================================
:: REMOVE SCOOP (USER INSTALL)
:: - scoop 'current' folders are junctions
:: - rd /s /q removes the junction, not the target
:: ========================================================
if defined REMOVE_SCOOP if exist "%SCOOP_HOME%" (
echo %SCOOP_HOME%
rd /s /q "%SCOOP_HOME%" >nul 2>&1
)
:: ========================================================
:: REMOVE SHORTCUTS + REGISTRY
:: ========================================================
if exist "%STARTMENU_DIR%" (
echo %STARTMENU_DIR%
rd /s /q "%STARTMENU_DIR%" >nul 2>&1
)
if exist "%DESKTOP_LNK%" (
echo %DESKTOP_LNK%
del /q "%DESKTOP_LNK%" >nul 2>&1
)
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\ebook2audiobook" /f >nul 2>&1
:: ========================================================
:: CLEAN REPOSITORY CONTENT
:: - echo only first-level items
:: - delete recursively
:: - continue even if some items are already gone
:: ========================================================
echo Cleaning repository content...
:: Delete files
for %%I in ("%REAL_INSTALL_DIR%\*") do (
if /i not "%%~nxI"=="%SCRIPT_NAME%" (
echo %%~nxI
del /f /q "%%~fI" >nul 2>&1
)
)
:: Delete directories
for /D %%I in ("%REAL_INSTALL_DIR%\*") do (
echo %%~nxI
rd /s /q "%%~fI" >nul 2>&1
)
if exist "%INSTALLED_LOG%" (
echo .installed
del /f /q "%INSTALLED_LOG%" >nul 2>&1
)
:: ========================================================
:: FINAL MESSAGE
:: ========================================================
echo.
echo ========================================================
echo Uninstallation completed.
echo.
echo The application content has been removed.
echo Please remove the empty repository folder manually:
echo.
echo %REAL_INSTALL_DIR%
echo.
echo ========================================================
echo.
echo Press a key to continue . . .
pause >nul
exit /b