Files
HyperCLI/files/experimental/software-management-tool.bat
2026-02-01 14:11:55 +00:00

544 lines
13 KiB
Batchfile

@echo off
REM === Software Management Tool ===
chcp 65001 >nul
setlocal enabledelayedexpansion
:MENU
cls
echo ========================================
echo Software Management Tool
echo ========================================
echo.
set /p ENABLE_EXPORT="Enable auto-export of reports? (Y/N): "
echo.
echo ========================================
echo.
echo [1] Scan installed software
echo [2] Check and install updates
echo [3] Uninstall software
echo [4] Full system report
echo [0] Exit
echo.
echo ========================================
set /p CHOICE="Select option: "
if "%CHOICE%"=="1" goto SCAN_SOFTWARE
if "%CHOICE%"=="2" goto CHECK_AND_UPDATE
if "%CHOICE%"=="3" goto UNINSTALL_SOFTWARE
if "%CHOICE%"=="4" goto FULL_REPORT
if "%CHOICE%"=="0" goto EXIT
goto MENU
:SCAN_SOFTWARE
cls
echo ========================================
echo Scan Installed Software
echo ========================================
echo.
echo Scanning system registry...
echo.
set "tempfile=%TEMP%\software_scan_%RANDOM%.tmp"
(
echo ========================================
echo INSTALLED SOFTWARE SCAN
echo Date: %date% %time%
echo Computer: %COMPUTERNAME%
echo ========================================
echo.
) > "%tempfile%"
REM 64-Bit Software
echo [1/3] Scanning 64-bit programs...
(
echo [64-BIT PROGRAMS]
echo ----------------------------------------
) >> "%tempfile%"
set COUNT64=0
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
set "hasname="
set "hasver="
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do set "hasname=%%c"
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
if defined hasname (
set /a COUNT64+=1
if defined hasver (
echo !hasname! [!hasver!] >> "%tempfile%"
) else (
echo !hasname! >> "%tempfile%"
)
)
)
echo Total: !COUNT64! programs >> "%tempfile%"
echo. >> "%tempfile%"
REM 32-Bit Software
echo [2/3] Scanning 32-bit programs...
(
echo [32-BIT PROGRAMS]
echo ----------------------------------------
) >> "%tempfile%"
set COUNT32=0
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
set "hasname="
set "hasver="
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do set "hasname=%%c"
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
if defined hasname (
set /a COUNT32+=1
if defined hasver (
echo !hasname! [!hasver!] >> "%tempfile%"
) else (
echo !hasname! >> "%tempfile%"
)
)
)
echo Total: !COUNT32! programs >> "%tempfile%"
echo. >> "%tempfile%"
REM User Software
echo [3/3] Scanning user-installed programs...
(
echo [USER PROGRAMS]
echo ----------------------------------------
) >> "%tempfile%"
set COUNTUSER=0
for /f "tokens=*" %%a in ('reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
set "hasname="
set "hasver="
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do set "hasname=%%c"
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
if defined hasname (
set /a COUNTUSER+=1
if defined hasver (
echo !hasname! [!hasver!] >> "%tempfile%"
) else (
echo !hasname! >> "%tempfile%"
)
)
)
echo Total: !COUNTUSER! programs >> "%tempfile%"
echo. >> "%tempfile%"
set /a TOTAL=COUNT64+COUNT32+COUNTUSER
(
echo ========================================
echo SUMMARY
echo ========================================
echo 64-bit programs: !COUNT64!
echo 32-bit programs: !COUNT32!
echo User programs: !COUNTUSER!
echo ----------------------------------------
echo Total installed: !TOTAL!
echo ========================================
) >> "%tempfile%"
cls
type "%tempfile%"
echo.
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Software_Scan"
del "%tempfile%" >nul 2>&1
pause
goto MENU
:CHECK_AND_UPDATE
cls
echo ========================================
echo Check and Install Updates
echo ========================================
echo.
set "tempfile=%TEMP%\update_check_%RANDOM%.tmp"
(
echo ========================================
echo UPDATE CHECK REPORT
echo Date: %date% %time%
echo Computer: %COMPUTERNAME%
echo ========================================
echo.
) > "%tempfile%"
echo Checking for available updates...
echo.
REM Check if winget is available
where winget >nul 2>&1
if %errorlevel%==0 (
echo Using Windows Package Manager (winget)...
echo. >> "%tempfile%"
echo [AVAILABLE UPDATES] >> "%tempfile%"
echo ---------------------------------------- >> "%tempfile%"
winget upgrade >> "%tempfile%" 2>&1
echo. >> "%tempfile%"
echo ======================================== >> "%tempfile%"
) else (
echo [NOTE] Winget is not installed. >> "%tempfile%"
echo Cannot check for updates automatically. >> "%tempfile%"
echo. >> "%tempfile%"
echo Please install Windows Package Manager or check manually. >> "%tempfile%"
)
echo ======================================== >> "%tempfile%"
cls
type "%tempfile%"
echo.
set "INSTALL_CHOICE="
set /p INSTALL_CHOICE="Install available updates? (Y/N): "
if /i "%INSTALL_CHOICE%"=="Y" (
cls
echo ========================================
echo Installing Updates
echo ========================================
echo.
echo Choose update method:
echo [1] Update all programs
echo [2] Update specific programs
echo [0] Cancel
echo.
set /p UPDATE_METHOD="Select option: "
if "!UPDATE_METHOD!"=="1" goto UPDATE_ALL_PROGRAMS
if "!UPDATE_METHOD!"=="2" goto UPDATE_SPECIFIC_PROGRAMS
if "!UPDATE_METHOD!"=="0" (
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Update_Check"
del "%tempfile%" >nul 2>&1
pause
goto MENU
)
goto CHECK_AND_UPDATE
)
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Update_Check"
del "%tempfile%" >nul 2>&1
pause
goto MENU
:UPDATE_ALL_PROGRAMS
cls
echo ========================================
echo Update All Programs
echo ========================================
echo.
echo Updating all available programs...
echo.
set "logfile=%TEMP%\update_all_%RANDOM%.log"
(
echo ========================================
echo UPDATE ALL PROGRAMS LOG
echo Date: %date% %time%
echo ========================================
echo.
) > "%logfile%"
where winget >nul 2>&1
if %errorlevel%==0 (
echo Starting update process... >> "%logfile%"
echo. >> "%logfile%"
winget upgrade --all --accept-source-agreements --accept-package-agreements >> "%logfile%" 2>&1
echo. >> "%logfile%"
echo Update process completed. >> "%logfile%"
) else (
echo [ERROR] Winget is not installed! >> "%logfile%"
echo Cannot update programs automatically. >> "%logfile%"
)
echo ======================================== >> "%logfile%"
cls
type "%logfile%"
echo.
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_All"
del "%logfile%" >nul 2>&1
pause
goto MENU
:UPDATE_SPECIFIC_PROGRAMS
cls
echo ========================================
echo Update Specific Programs
echo ========================================
echo.
echo Enter program IDs or names separated by commas.
echo Example: Firefox, Chrome, VSCode
echo.
set /p PROGRAMS="Programs (comma-separated): "
if "%PROGRAMS%"=="" (
echo [ERROR] No programs specified!
pause
goto CHECK_AND_UPDATE
)
echo.
echo Updating selected programs...
echo.
set "logfile=%TEMP%\update_specific_%RANDOM%.log"
(
echo ========================================
echo SPECIFIC PROGRAM UPDATE LOG
echo Date: %date% %time%
echo ========================================
echo.
echo Programs to update: %PROGRAMS%
echo.
) > "%logfile%"
REM Process comma-separated list
set "PROGRAMS=%PROGRAMS:, =,%"
set "PROGRAMS=%PROGRAMS: ,=,%"
for %%P in (%PROGRAMS%) do (
echo ---------------------------------------- >> "%logfile%"
echo Updating: %%P >> "%logfile%"
echo ---------------------------------------- >> "%logfile%"
where winget >nul 2>&1
if !errorlevel!==0 (
winget upgrade "%%P" --accept-source-agreements --accept-package-agreements >> "%logfile%" 2>&1
) else (
echo [ERROR] Winget not available >> "%logfile%"
)
echo. >> "%logfile%"
)
echo ======================================== >> "%logfile%"
echo Update process completed. >> "%logfile%"
cls
type "%logfile%"
echo.
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_Specific"
del "%logfile%" >nul 2>&1
pause
goto MENU
:UNINSTALL_SOFTWARE
cls
echo ========================================
echo Uninstall Software
echo ========================================
echo.
echo [1] View installed programs
echo [2] Uninstall by name
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%"=="0" goto MENU
goto UNINSTALL_SOFTWARE
:VIEW_FOR_UNINSTALL
cls
echo ========================================
echo Installed Programs
echo ========================================
echo.
echo Scanning...
echo.
set "tempfile=%TEMP%\uninstall_list_%RANDOM%.tmp"
(
echo Available Programs:
echo ========================================
echo.
) > "%tempfile%"
set COUNT=0
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
set /a COUNT+=1
echo !COUNT!. %%c >> "%tempfile%"
)
)
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
set /a COUNT+=1
echo !COUNT!. %%c >> "%tempfile%"
)
)
cls
type "%tempfile%"
echo.
echo ========================================
del "%tempfile%" >nul 2>&1
pause
goto UNINSTALL_SOFTWARE
:UNINSTALL_BY_NAME
cls
echo ========================================
echo Uninstall by Name
echo ========================================
echo.
set /p PROGRAM_NAME="Enter program name: "
if "%PROGRAM_NAME%"=="" (
echo [ERROR] No program name entered!
pause
goto UNINSTALL_SOFTWARE
)
echo.
echo Searching for: %PROGRAM_NAME%
echo.
where winget >nul 2>&1
if %errorlevel%==0 (
winget uninstall "%PROGRAM_NAME%"
) else (
echo [NOTE] Using Windows Settings...
start ms-settings:appsfeatures
)
pause
goto MENU
:FULL_REPORT
cls
echo ========================================
echo Full System Report
echo ========================================
echo.
set "tempfile=%TEMP%\full_report_%RANDOM%.tmp"
(
echo ========================================
echo FULL SYSTEM REPORT
echo Date: %date% %time%
echo Computer: %COMPUTERNAME%
echo User: %USERNAME%
echo ========================================
echo.
) > "%tempfile%"
echo [1/4] System Information...
(
echo [SYSTEM INFORMATION]
echo ----------------------------------------
) >> "%tempfile%"
systeminfo | findstr /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Total Physical Memory" >> "%tempfile%"
echo. >> "%tempfile%"
echo [2/4] Installed Software...
(
echo [INSTALLED SOFTWARE]
echo ----------------------------------------
) >> "%tempfile%"
set TOTALSOFT=0
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
set /a TOTALSOFT+=1
echo %%c >> "%tempfile%"
)
)
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
set /a TOTALSOFT+=1
echo %%c >> "%tempfile%"
)
)
echo. >> "%tempfile%"
echo Total: !TOTALSOFT! programs >> "%tempfile%"
echo. >> "%tempfile%"
echo [3/4] Running Processes...
(
echo [RUNNING PROCESSES]
echo ----------------------------------------
) >> "%tempfile%"
tasklist >> "%tempfile%"
echo. >> "%tempfile%"
echo [4/4] Available Updates...
(
echo [AVAILABLE UPDATES]
echo ----------------------------------------
) >> "%tempfile%"
where winget >nul 2>&1
if %errorlevel%==0 (
winget upgrade >> "%tempfile%" 2>&1
) else (
echo [NOTE] Winget is not installed. >> "%tempfile%"
echo Cannot check for updates. >> "%tempfile%"
)
echo ======================================== >> "%tempfile%"
cls
type "%tempfile%"
echo.
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Full_System_Report"
del "%tempfile%" >nul 2>&1
pause
goto MENU
:EXPORT_FILE
set "source=%~1"
set "basename=%~2"
set "exportfile=%USERPROFILE%\Desktop\%basename%_%date:~-4,4%%date:~-7,2%%date:~-10,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
set "exportfile=%exportfile: =0%"
copy "%source%" "%exportfile%" >nul 2>&1
if %errorlevel%==0 (
echo.
echo [SUCCESS] Report exported to:
echo %exportfile%
echo.
) else (
echo.
echo [ERROR] Could not export file!
echo.
)
exit /b
:EXIT
cls
echo ========================================
echo Thank you for using Software Management Tool
echo ========================================
echo.
timeout /t 2 >nul
exit