CPN commit
This commit is contained in:
@@ -422,12 +422,14 @@ echo ========================================
|
|||||||
echo.
|
echo.
|
||||||
echo [1] View installed programs
|
echo [1] View installed programs
|
||||||
echo [2] Uninstall by name
|
echo [2] Uninstall by name
|
||||||
|
echo [3] Select programs to uninstall (interactive)
|
||||||
echo [0] Back to menu
|
echo [0] Back to menu
|
||||||
echo.
|
echo.
|
||||||
set /p UNINSTALL_CHOICE="Select option: "
|
set /p UNINSTALL_CHOICE="Select option: "
|
||||||
|
|
||||||
if "%UNINSTALL_CHOICE%"=="1" goto VIEW_FOR_UNINSTALL
|
if "%UNINSTALL_CHOICE%"=="1" goto VIEW_FOR_UNINSTALL
|
||||||
if "%UNINSTALL_CHOICE%"=="2" goto UNINSTALL_BY_NAME
|
if "%UNINSTALL_CHOICE%"=="2" goto UNINSTALL_BY_NAME
|
||||||
|
if "%UNINSTALL_CHOICE%"=="3" goto SELECT_UNINSTALL
|
||||||
if "%UNINSTALL_CHOICE%"=="0" goto MENU
|
if "%UNINSTALL_CHOICE%"=="0" goto MENU
|
||||||
goto UNINSTALL_SOFTWARE
|
goto UNINSTALL_SOFTWARE
|
||||||
|
|
||||||
@@ -472,6 +474,204 @@ del "%tempfile%" >nul 2>&1
|
|||||||
pause
|
pause
|
||||||
goto UNINSTALL_SOFTWARE
|
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
|
:UNINSTALL_BY_NAME
|
||||||
cls
|
cls
|
||||||
echo ========================================
|
echo ========================================
|
||||||
|
|||||||
Reference in New Issue
Block a user