CPN commit
This commit is contained in:
@@ -422,12 +422,14 @@ echo ========================================
|
||||
echo.
|
||||
echo [1] View installed programs
|
||||
echo [2] Uninstall by name
|
||||
echo [3] Select programs to uninstall (interactive)
|
||||
echo [0] Back to menu
|
||||
echo.
|
||||
set /p UNINSTALL_CHOICE="Select option: "
|
||||
|
||||
if "%UNINSTALL_CHOICE%"=="1" goto VIEW_FOR_UNINSTALL
|
||||
if "%UNINSTALL_CHOICE%"=="2" goto UNINSTALL_BY_NAME
|
||||
if "%UNINSTALL_CHOICE%"=="3" goto SELECT_UNINSTALL
|
||||
if "%UNINSTALL_CHOICE%"=="0" goto MENU
|
||||
goto UNINSTALL_SOFTWARE
|
||||
|
||||
@@ -472,6 +474,204 @@ del "%tempfile%" >nul 2>&1
|
||||
pause
|
||||
goto UNINSTALL_SOFTWARE
|
||||
|
||||
:SELECT_UNINSTALL
|
||||
cls
|
||||
echo ========================================
|
||||
echo Select Programs to Uninstall
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Scanning installed programs...
|
||||
echo.
|
||||
|
||||
REM Collect all programs directly into arrays
|
||||
set INDEX=0
|
||||
set "templist=%TEMP%\prog_temp_%RANDOM%.txt"
|
||||
|
||||
echo Collecting 64-bit programs...
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2>nul > "%templist%"
|
||||
for /f "tokens=*" %%a in ('type "%templist%"') do (
|
||||
reg query "%%a" /v DisplayName 2>nul | findstr "DisplayName" >nul
|
||||
if !errorlevel!==0 (
|
||||
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
|
||||
set /a INDEX+=1
|
||||
set "PROG_NAME_!INDEX!=%%c"
|
||||
set "PROG_REG_!INDEX!=%%a"
|
||||
set "SELECTED_!INDEX!=0"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
echo Collecting 32-bit programs...
|
||||
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 2>nul > "%templist%"
|
||||
for /f "tokens=*" %%a in ('type "%templist%"') do (
|
||||
reg query "%%a" /v DisplayName 2>nul | findstr "DisplayName" >nul
|
||||
if !errorlevel!==0 (
|
||||
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
|
||||
set /a INDEX+=1
|
||||
set "PROG_NAME_!INDEX!=%%c"
|
||||
set "PROG_REG_!INDEX!=%%a"
|
||||
set "SELECTED_!INDEX!=0"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
echo Collecting user programs...
|
||||
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2>nul > "%templist%"
|
||||
for /f "tokens=*" %%a in ('type "%templist%"') do (
|
||||
reg query "%%a" /v DisplayName 2>nul | findstr "DisplayName" >nul
|
||||
if !errorlevel!==0 (
|
||||
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
|
||||
set /a INDEX+=1
|
||||
set "PROG_NAME_!INDEX!=%%c (User)"
|
||||
set "PROG_REG_!INDEX!=%%a"
|
||||
set "SELECTED_!INDEX!=0"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
del "%templist%" >nul 2>&1
|
||||
echo.
|
||||
echo Found !INDEX! programs total.
|
||||
|
||||
if %INDEX%==0 (
|
||||
echo No programs found!
|
||||
pause
|
||||
goto UNINSTALL_SOFTWARE
|
||||
)
|
||||
|
||||
set CURRENT=1
|
||||
set TOTAL=%INDEX%
|
||||
|
||||
:DISPLAY_SELECTION
|
||||
cls
|
||||
echo ========================================
|
||||
echo Select Programs to Uninstall
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Enter the numbers of programs to uninstall (separated by spaces)
|
||||
echo Example: 1 3 5 7
|
||||
echo Or press 0 to cancel
|
||||
echo.
|
||||
echo ----------------------------------------
|
||||
echo.
|
||||
|
||||
REM Display all programs with numbers
|
||||
for /l %%i in (1,1,%TOTAL%) do (
|
||||
echo [%%i] !PROG_NAME_%%i!
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ----------------------------------------
|
||||
set /p SELECTIONS="Enter numbers (space-separated) or 0 to cancel: "
|
||||
|
||||
if "%SELECTIONS%"=="0" goto CANCEL_SELECTION
|
||||
if "%SELECTIONS%"=="" goto DISPLAY_SELECTION
|
||||
|
||||
REM Mark selected programs
|
||||
for %%S in (%SELECTIONS%) do (
|
||||
if defined PROG_NAME_%%S (
|
||||
set "SELECTED_%%S=1"
|
||||
)
|
||||
)
|
||||
|
||||
goto CONFIRM_SELECTION
|
||||
|
||||
:CANCEL_SELECTION
|
||||
goto UNINSTALL_SOFTWARE
|
||||
|
||||
:CONFIRM_SELECTION
|
||||
REM Check if any programs selected
|
||||
set SELECTED_COUNT=0
|
||||
for /l %%i in (1,1,%TOTAL%) do (
|
||||
if !SELECTED_%%i!==1 set /a SELECTED_COUNT+=1
|
||||
)
|
||||
|
||||
if %SELECTED_COUNT%==0 (
|
||||
echo.
|
||||
echo [WARNING] No valid programs selected!
|
||||
timeout /t 2 >nul
|
||||
goto CANCEL_SELECTION
|
||||
)
|
||||
|
||||
cls
|
||||
echo ========================================
|
||||
echo Confirm Uninstallation
|
||||
echo ========================================
|
||||
echo.
|
||||
echo The following programs will be uninstalled:
|
||||
echo.
|
||||
|
||||
for /l %%i in (1,1,%TOTAL%) do (
|
||||
if !SELECTED_%%i!==1 (
|
||||
echo - !PROG_NAME_%%i!
|
||||
)
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
set /p CONFIRM="Are you sure? (Y/N): "
|
||||
|
||||
if /i not "%CONFIRM%"=="Y" goto CANCEL_SELECTION
|
||||
|
||||
cls
|
||||
echo ========================================
|
||||
echo Uninstalling Selected Programs
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
set "logfile=%TEMP%\\uninstall_log_%RANDOM%.log"
|
||||
|
||||
(
|
||||
echo ========================================
|
||||
echo UNINSTALL LOG
|
||||
echo Date: %date% %time%
|
||||
echo ========================================
|
||||
echo.
|
||||
) > "%logfile%"
|
||||
|
||||
REM Uninstall selected programs
|
||||
for /l %%i in (1,1,%TOTAL%) do (
|
||||
if !SELECTED_%%i!==1 (
|
||||
echo ---------------------------------------- >> "%logfile%"
|
||||
echo Uninstalling: !PROG_NAME_%%i! >> "%logfile%"
|
||||
echo Registry: !PROG_REG_%%i! >> "%logfile%"
|
||||
echo ---------------------------------------- >> "%logfile%"
|
||||
echo Uninstalling: !PROG_NAME_%%i!
|
||||
|
||||
REM Try to get uninstall string
|
||||
for /f "skip=2 tokens=2*" %%u in ('reg query "!PROG_REG_%%i!" /v UninstallString 2^>nul') do (
|
||||
echo Uninstall command: %%v >> "%logfile%"
|
||||
|
||||
REM Execute uninstall
|
||||
echo Running uninstaller... >> "%logfile%"
|
||||
start /wait "" %%v >> "%logfile%" 2>&1
|
||||
|
||||
if !errorlevel!==0 (
|
||||
echo [SUCCESS] Uninstalled successfully >> "%logfile%"
|
||||
echo [SUCCESS] Uninstalled successfully
|
||||
) else (
|
||||
echo [WARNING] Uninstall may have failed or was cancelled >> "%logfile%"
|
||||
echo [WARNING] Uninstall may have failed or was cancelled
|
||||
)
|
||||
)
|
||||
|
||||
echo. >> "%logfile%"
|
||||
)
|
||||
)
|
||||
|
||||
echo ======================================== >> "%logfile%"
|
||||
echo Uninstall process completed. >> "%logfile%"
|
||||
|
||||
cls
|
||||
type "%logfile%"
|
||||
echo.
|
||||
|
||||
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Uninstall_Selected"
|
||||
|
||||
del "%logfile%" >nul 2>&1
|
||||
pause
|
||||
goto MENU
|
||||
|
||||
:UNINSTALL_BY_NAME
|
||||
cls
|
||||
echo ========================================
|
||||
|
||||
Reference in New Issue
Block a user