CPN commit

This commit is contained in:
2026-02-04 09:36:55 +01:00
parent 5153ea40c2
commit 8c3d2dcab1

View File

@@ -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 ========================================