From 26c93bee0f0f56e4d9e8f40018a4706f69d63445 Mon Sep 17 00:00:00 2001 From: Flamur Veliqi Date: Sun, 1 Feb 2026 14:11:55 +0000 Subject: [PATCH] CPN commit --- .../experimental/software-management-tool.bat | 1167 ++++++++--------- 1 file changed, 543 insertions(+), 624 deletions(-) diff --git a/files/experimental/software-management-tool.bat b/files/experimental/software-management-tool.bat index 66f2102..ac153f8 100644 --- a/files/experimental/software-management-tool.bat +++ b/files/experimental/software-management-tool.bat @@ -1,624 +1,543 @@ -@echo off -REM === Software Management Tool === -chcp 65001 >nul -setlocal enabledelayedexpansion - -:MENU -cls -echo ======================================== -echo Software Management Tool -echo ======================================== -echo. -echo [1] Scan installed software -echo [2] Check for updates only -echo [3] Install available updates -echo [4] Uninstall software -echo [5] Full system report -echo [0] Exit -echo. -echo ======================================== -set /p CHOICE="Select option: " - -if "%CHOICE%"=="1" goto SCAN_SOFTWARE -if "%CHOICE%"=="2" goto CHECK_UPDATES -if "%CHOICE%"=="3" goto INSTALL_UPDATES -if "%CHOICE%"=="4" goto UNINSTALL_SOFTWARE -if "%CHOICE%"=="5" 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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver ( - echo !hasname! ^| Version: !hasver! >> "%tempfile%" - set /a COUNT64+=1 - ) -) - -REM 32-Bit Software -echo [2/3] Scanning 32-bit programs... -( -echo. -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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver ( - echo !hasname! ^| Version: !hasver! >> "%tempfile%" - set /a COUNT32+=1 - ) -) - -REM User Programs -echo [3/3] Scanning user programs... -( -echo. -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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver ( - echo !hasname! ^| Version: !hasver! >> "%tempfile%" - set /a COUNTUSER+=1 - ) -) - -set /a TOTAL=COUNT64+COUNT32+COUNTUSER - -( -echo. -echo ======================================== -echo SUMMARY -echo ======================================== -echo Total programs found: %TOTAL% -echo - 64-bit: %COUNT64% -echo - 32-bit: %COUNT32% -echo - User: %COUNTUSER% -echo ======================================== -) >> "%tempfile%" - -cls -type "%tempfile%" -echo. - -set /p EXPORT="Export results to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Software_Scan" - -del "%tempfile%" >nul 2>&1 -pause -goto MENU - -:CHECK_UPDATES -cls -echo ======================================== -echo Check for Updates -echo ======================================== -echo. - -where winget >nul 2>&1 -if %errorlevel% neq 0 ( - echo [ERROR] Winget is not installed! - echo. - echo EXPLANATION: - echo Winget is Microsoft's package manager for Windows. - echo It is required to check and install updates. - echo. - echo SOLUTION: - echo 1. Open Microsoft Store - echo 2. Search for "App Installer" - echo 3. Install or Update it - echo. - pause - goto MENU -) - -echo Checking for available updates... -echo This may take a moment... -echo. - -set "tempfile=%TEMP%\updates_check_%RANDOM%.tmp" - -( -echo ======================================== -echo UPDATE CHECK REPORT -echo Date: %date% %time% -echo Computer: %COMPUTERNAME% -echo ======================================== -echo. -) > "%tempfile%" - -winget upgrade >> "%tempfile%" 2>&1 - -cls -type "%tempfile%" -echo. - -set /p EXPORT="Export results to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Update_Check" - -del "%tempfile%" >nul 2>&1 -pause -goto MENU - -:INSTALL_UPDATES -cls -echo ======================================== -echo Install Updates -echo ======================================== -echo. - -where winget >nul 2>&1 -if %errorlevel% neq 0 ( - echo [ERROR] Winget is not installed! - echo. - echo EXPLANATION: - echo Winget is required to install updates. - echo. - echo SOLUTION: - echo Install "App Installer" from Microsoft Store. - echo. - pause - goto MENU -) - -echo Checking for available updates... -echo. - -winget upgrade | more - -echo. -echo ======================================== -echo. -echo [1] Update all programs -echo [2] Update specific program -echo [3] Update multiple programs (comma-separated) -echo [0] Cancel -echo. -set /p UPDATE_MODE="Select update mode: " - -if "%UPDATE_MODE%"=="1" goto UPDATE_ALL -if "%UPDATE_MODE%"=="2" goto UPDATE_SPECIFIC -if "%UPDATE_MODE%"=="3" goto UPDATE_MULTIPLE -if "%UPDATE_MODE%"=="0" goto MENU -goto INSTALL_UPDATES - -:UPDATE_ALL -cls -echo ======================================== -echo Updating All Programs -echo ======================================== -echo. -echo WARNING: This will update all available programs. -echo This process may take several minutes. -echo. -set /p CONFIRM="Continue? (Y/N): " - -if /i not "%CONFIRM%"=="Y" goto INSTALL_UPDATES - -echo. -echo Starting update process... -echo. - -set "logfile=%TEMP%\update_all_%RANDOM%.log" -winget upgrade --all > "%logfile%" 2>&1 - -cls -type "%logfile%" - -echo. -echo ======================================== -echo Update process completed! -echo ======================================== -echo. - -set /p EXPORT="Export log to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_All_Log" - -del "%logfile%" >nul 2>&1 -pause -goto MENU - -:UPDATE_SPECIFIC -cls -echo ======================================== -echo Update Specific Program -echo ======================================== -echo. -echo Enter the exact program ID or name from the list above. -echo Example: Microsoft.VisualStudioCode -echo. -set /p PROGRAM_ID="Program ID/Name: " - -if "%PROGRAM_ID%"=="" ( - echo [ERROR] No program specified! - pause - goto INSTALL_UPDATES -) - -echo. -echo Updating: %PROGRAM_ID% -echo. - -set "logfile=%TEMP%\update_single_%RANDOM%.log" -winget upgrade "%PROGRAM_ID%" > "%logfile%" 2>&1 - -type "%logfile%" - -if %errorlevel% neq 0 ( - echo. - echo [ERROR] Update failed! - echo. - echo POSSIBLE REASONS: - echo - Program ID/Name incorrect - echo - Program not found in winget - echo - No update available for this program - echo - Permission denied - echo. -) - -echo. -set /p EXPORT="Export log to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_Single_Log" - -del "%logfile%" >nul 2>&1 - -echo. -set /p ANOTHER="Update another program? (Y/N): " -if /i "%ANOTHER%"=="Y" goto UPDATE_SPECIFIC -goto MENU - -:UPDATE_MULTIPLE -cls -echo ======================================== -echo Update Multiple 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 INSTALL_UPDATES -) - -echo. -echo Updating selected programs... -echo. - -set "logfile=%TEMP%\update_multi_%RANDOM%.log" - -( -echo ======================================== -echo MULTIPLE PROGRAM UPDATE LOG -echo Date: %date% %time% -echo ======================================== -echo. -) > "%logfile%" - -for %%p in (%PROGRAMS%) do ( - echo ---------------------------------------- >> "%logfile%" - echo Updating: %%p >> "%logfile%" - echo ---------------------------------------- >> "%logfile%" - winget upgrade "%%p" >> "%logfile%" 2>&1 - echo. >> "%logfile%" -) - -cls -type "%logfile%" - -echo. -echo ======================================== -echo All updates completed! -echo ======================================== -echo. - -set /p EXPORT="Export log to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_Multi_Log" - -del "%logfile%" >nul 2>&1 -pause -goto MENU - -:UNINSTALL_SOFTWARE -cls -echo ======================================== -echo Uninstall Software -echo ======================================== -echo. - -where winget >nul 2>&1 -if %errorlevel% neq 0 ( - echo [ERROR] Winget is not installed! - echo. - echo EXPLANATION: - echo Winget is required for safe uninstallation. - echo. - echo ALTERNATIVE: - echo Use Windows Settings - Apps - Installed apps - echo. - pause - goto MENU -) - -echo Listing installed software... -echo. - -winget list | more - -echo. -echo ======================================== -echo. -echo [1] Uninstall single program -echo [2] Uninstall multiple programs (comma-separated) -echo [0] Cancel -echo. -set /p UNINSTALL_MODE="Select mode: " - -if "%UNINSTALL_MODE%"=="1" goto UNINSTALL_SINGLE -if "%UNINSTALL_MODE%"=="2" goto UNINSTALL_MULTIPLE -if "%UNINSTALL_MODE%"=="0" goto MENU -goto UNINSTALL_SOFTWARE - -:UNINSTALL_SINGLE -cls -echo ======================================== -echo Uninstall Single Program -echo ======================================== -echo. -set /p PROGRAM="Enter program ID or name: " - -if "%PROGRAM%"=="" ( - echo [ERROR] No program specified! - pause - goto UNINSTALL_SOFTWARE -) - -echo. -echo WARNING: This will uninstall: %PROGRAM% -echo. -set /p CONFIRM="Are you sure? (Y/N): " - -if /i not "%CONFIRM%"=="Y" goto UNINSTALL_SOFTWARE - -echo. -echo Uninstalling %PROGRAM%... -echo. - -winget uninstall "%PROGRAM%" - -if %errorlevel% neq 0 ( - echo. - echo [ERROR] Uninstallation failed! - echo. - echo POSSIBLE REASONS: - echo - Program ID/Name incorrect - echo - Program not found - echo - Permission denied (try running as Administrator) - echo - Program requires manual uninstallation - echo. -) - -echo. -set /p ANOTHER="Uninstall another program? (Y/N): " -if /i "%ANOTHER%"=="Y" goto UNINSTALL_SINGLE -goto MENU - -:UNINSTALL_MULTIPLE -cls -echo ======================================== -echo Uninstall Multiple 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 UNINSTALL_SOFTWARE -) - -echo. -echo WARNING: This will uninstall the following programs: -echo %PROGRAMS% -echo. -set /p CONFIRM="Are you sure? (Y/N): " - -if /i not "%CONFIRM%"=="Y" goto UNINSTALL_SOFTWARE - -echo. -echo Uninstalling selected programs... -echo. - -for %%p in (%PROGRAMS%) do ( - echo ======================================== - echo Uninstalling: %%p - echo ======================================== - winget uninstall "%%p" - echo. -) - -echo. -echo ======================================== -echo Uninstallation completed! -echo ======================================== -pause -goto MENU - -:FULL_REPORT -cls -echo ======================================== -echo Full System Report -echo ======================================== -echo. -echo Generating comprehensive report... -echo This may take a moment... -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. -echo. -echo [INSTALLED SOFTWARE - 64-BIT] -echo ---------------------------------------- -) > "%tempfile%" - -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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver echo !hasname! ^| Version: !hasver! >> "%tempfile%" -) - -( -echo. -echo [INSTALLED SOFTWARE - 32-BIT] -echo ---------------------------------------- -) >> "%tempfile%" - -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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver echo !hasname! ^| Version: !hasver! >> "%tempfile%" -) - -( -echo. -echo [INSTALLED SOFTWARE - USER] -echo ---------------------------------------- -) >> "%tempfile%" - -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*" %%d in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%e" - if defined hasname if defined hasver echo !hasname! ^| Version: !hasver! >> "%tempfile%" -) - -( -echo. -echo. -echo ======================================== -echo AVAILABLE UPDATES -echo ======================================== -echo. -) >> "%tempfile%" - -where winget >nul 2>&1 -if %errorlevel% equ 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. - -set /p EXPORT="Export report to file? (Y/N): " -if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Full_System_Report" - -del "%tempfile%" >nul 2>&1 -pause -goto MENU - -:EXPORT_FILE -set "source=%~1" -set "prefix=%~2" -set "timestamp=%date:~-4%%date:~-7,2%%date:~-10,2%_%time:~0,2%%time:~3,2%%time:~6,2%" -set "timestamp=%timestamp: =0%" -set "output=%USERPROFILE%\Desktop\%prefix%_%timestamp%.txt" - -copy "%source%" "%output%" >nul - -if %errorlevel% neq 0 ( - echo. - echo [ERROR] Export failed! - echo. - echo POSSIBLE REASONS: - echo - Desktop folder not accessible - echo - Insufficient permissions - echo - Disk full - echo. - echo Trying alternative location... - set "output=%TEMP%\%prefix%_%timestamp%.txt" - copy "%source%" "!output!" >nul -) - -echo. -echo [OK] File saved to: -echo %output% -echo. - -set /p OPEN_FILE="Open file now? (Y/N): " -if /i "%OPEN_FILE%"=="Y" start notepad "%output%" - -goto :EOF - -:EXIT -cls -echo Exiting... -timeout /t 1 /nobreak >nul -exit \ No newline at end of file +@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