CPN commit
This commit is contained in:
@@ -9,21 +9,23 @@ echo ========================================
|
|||||||
echo Software Management Tool
|
echo Software Management Tool
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
set /p ENABLE_EXPORT="Enable auto-export of reports? (Y/N): "
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
echo [1] Scan installed software
|
echo [1] Scan installed software
|
||||||
echo [2] Check for updates only
|
echo [2] Check and install updates
|
||||||
echo [3] Install available updates
|
echo [3] Uninstall software
|
||||||
echo [4] Uninstall software
|
echo [4] Full system report
|
||||||
echo [5] Full system report
|
|
||||||
echo [0] Exit
|
echo [0] Exit
|
||||||
echo.
|
echo.
|
||||||
echo ========================================
|
echo ========================================
|
||||||
set /p CHOICE="Select option: "
|
set /p CHOICE="Select option: "
|
||||||
|
|
||||||
if "%CHOICE%"=="1" goto SCAN_SOFTWARE
|
if "%CHOICE%"=="1" goto SCAN_SOFTWARE
|
||||||
if "%CHOICE%"=="2" goto CHECK_UPDATES
|
if "%CHOICE%"=="2" goto CHECK_AND_UPDATE
|
||||||
if "%CHOICE%"=="3" goto INSTALL_UPDATES
|
if "%CHOICE%"=="3" goto UNINSTALL_SOFTWARE
|
||||||
if "%CHOICE%"=="4" goto UNINSTALL_SOFTWARE
|
if "%CHOICE%"=="4" goto FULL_REPORT
|
||||||
if "%CHOICE%"=="5" goto FULL_REPORT
|
|
||||||
if "%CHOICE%"=="0" goto EXIT
|
if "%CHOICE%"=="0" goto EXIT
|
||||||
goto MENU
|
goto MENU
|
||||||
|
|
||||||
@@ -59,17 +61,24 @@ for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVer
|
|||||||
set "hasname="
|
set "hasname="
|
||||||
set "hasver="
|
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 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"
|
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
|
||||||
if defined hasname if defined hasver (
|
|
||||||
echo !hasname! ^| Version: !hasver! >> "%tempfile%"
|
if defined hasname (
|
||||||
set /a COUNT64+=1
|
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
|
REM 32-Bit Software
|
||||||
echo [2/3] Scanning 32-bit programs...
|
echo [2/3] Scanning 32-bit programs...
|
||||||
(
|
(
|
||||||
echo.
|
|
||||||
echo [32-BIT PROGRAMS]
|
echo [32-BIT PROGRAMS]
|
||||||
echo ----------------------------------------
|
echo ----------------------------------------
|
||||||
) >> "%tempfile%"
|
) >> "%tempfile%"
|
||||||
@@ -79,17 +88,24 @@ for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Window
|
|||||||
set "hasname="
|
set "hasname="
|
||||||
set "hasver="
|
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 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"
|
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
|
||||||
if defined hasname if defined hasver (
|
|
||||||
echo !hasname! ^| Version: !hasver! >> "%tempfile%"
|
if defined hasname (
|
||||||
set /a COUNT32+=1
|
set /a COUNT32+=1
|
||||||
|
if defined hasver (
|
||||||
|
echo !hasname! [!hasver!] >> "%tempfile%"
|
||||||
|
) else (
|
||||||
|
echo !hasname! >> "%tempfile%"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
REM User Programs
|
echo Total: !COUNT32! programs >> "%tempfile%"
|
||||||
echo [3/3] Scanning user programs...
|
echo. >> "%tempfile%"
|
||||||
|
|
||||||
|
REM User Software
|
||||||
|
echo [3/3] Scanning user-installed programs...
|
||||||
(
|
(
|
||||||
echo.
|
|
||||||
echo [USER PROGRAMS]
|
echo [USER PROGRAMS]
|
||||||
echo ----------------------------------------
|
echo ----------------------------------------
|
||||||
) >> "%tempfile%"
|
) >> "%tempfile%"
|
||||||
@@ -99,24 +115,31 @@ for /f "tokens=*" %%a in ('reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVer
|
|||||||
set "hasname="
|
set "hasname="
|
||||||
set "hasver="
|
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 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"
|
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayVersion 2^>nul') do set "hasver=%%c"
|
||||||
if defined hasname if defined hasver (
|
|
||||||
echo !hasname! ^| Version: !hasver! >> "%tempfile%"
|
if defined hasname (
|
||||||
set /a COUNTUSER+=1
|
set /a COUNTUSER+=1
|
||||||
|
if defined hasver (
|
||||||
|
echo !hasname! [!hasver!] >> "%tempfile%"
|
||||||
|
) else (
|
||||||
|
echo !hasname! >> "%tempfile%"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
set /a TOTAL=COUNT64+COUNT32+COUNTUSER
|
echo Total: !COUNTUSER! programs >> "%tempfile%"
|
||||||
|
echo. >> "%tempfile%"
|
||||||
|
|
||||||
|
set /a TOTAL=COUNT64+COUNT32+COUNTUSER
|
||||||
(
|
(
|
||||||
echo.
|
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo SUMMARY
|
echo SUMMARY
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Total programs found: %TOTAL%
|
echo 64-bit programs: !COUNT64!
|
||||||
echo - 64-bit: %COUNT64%
|
echo 32-bit programs: !COUNT32!
|
||||||
echo - 32-bit: %COUNT32%
|
echo User programs: !COUNTUSER!
|
||||||
echo - User: %COUNTUSER%
|
echo ----------------------------------------
|
||||||
|
echo Total installed: !TOTAL!
|
||||||
echo ========================================
|
echo ========================================
|
||||||
) >> "%tempfile%"
|
) >> "%tempfile%"
|
||||||
|
|
||||||
@@ -124,42 +147,20 @@ cls
|
|||||||
type "%tempfile%"
|
type "%tempfile%"
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set /p EXPORT="Export results to file? (Y/N): "
|
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Software_Scan"
|
||||||
if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Software_Scan"
|
|
||||||
|
|
||||||
del "%tempfile%" >nul 2>&1
|
del "%tempfile%" >nul 2>&1
|
||||||
pause
|
pause
|
||||||
goto MENU
|
goto MENU
|
||||||
|
|
||||||
:CHECK_UPDATES
|
:CHECK_AND_UPDATE
|
||||||
cls
|
cls
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Check for Updates
|
echo Check and Install Updates
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
where winget >nul 2>&1
|
set "tempfile=%TEMP%\update_check_%RANDOM%.tmp"
|
||||||
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 ========================================
|
||||||
@@ -170,150 +171,116 @@ echo ========================================
|
|||||||
echo.
|
echo.
|
||||||
) > "%tempfile%"
|
) > "%tempfile%"
|
||||||
|
|
||||||
winget upgrade >> "%tempfile%" 2>&1
|
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
|
cls
|
||||||
type "%tempfile%"
|
type "%tempfile%"
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set /p EXPORT="Export results to file? (Y/N): "
|
set "INSTALL_CHOICE="
|
||||||
if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Update_Check"
|
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
|
del "%tempfile%" >nul 2>&1
|
||||||
pause
|
pause
|
||||||
goto MENU
|
goto MENU
|
||||||
|
|
||||||
:INSTALL_UPDATES
|
:UPDATE_ALL_PROGRAMS
|
||||||
cls
|
cls
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Install Updates
|
echo Update All Programs
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
echo Updating all available programs...
|
||||||
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.
|
echo.
|
||||||
|
|
||||||
set "logfile=%TEMP%\update_all_%RANDOM%.log"
|
set "logfile=%TEMP%\update_all_%RANDOM%.log"
|
||||||
winget upgrade --all > "%logfile%" 2>&1
|
|
||||||
|
(
|
||||||
|
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
|
cls
|
||||||
type "%logfile%"
|
type "%logfile%"
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ========================================
|
|
||||||
echo Update process completed!
|
|
||||||
echo ========================================
|
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set /p EXPORT="Export log to file? (Y/N): "
|
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_All"
|
||||||
if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_All_Log"
|
|
||||||
|
|
||||||
del "%logfile%" >nul 2>&1
|
del "%logfile%" >nul 2>&1
|
||||||
pause
|
pause
|
||||||
goto MENU
|
goto MENU
|
||||||
|
|
||||||
:UPDATE_SPECIFIC
|
:UPDATE_SPECIFIC_PROGRAMS
|
||||||
cls
|
cls
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Update Specific Program
|
echo Update Specific Programs
|
||||||
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.
|
echo.
|
||||||
echo Enter program IDs or names separated by commas.
|
echo Enter program IDs or names separated by commas.
|
||||||
@@ -324,42 +291,51 @@ set /p PROGRAMS="Programs (comma-separated): "
|
|||||||
if "%PROGRAMS%"=="" (
|
if "%PROGRAMS%"=="" (
|
||||||
echo [ERROR] No programs specified!
|
echo [ERROR] No programs specified!
|
||||||
pause
|
pause
|
||||||
goto INSTALL_UPDATES
|
goto CHECK_AND_UPDATE
|
||||||
)
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo Updating selected programs...
|
echo Updating selected programs...
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set "logfile=%TEMP%\update_multi_%RANDOM%.log"
|
set "logfile=%TEMP%\update_specific_%RANDOM%.log"
|
||||||
|
|
||||||
(
|
(
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo MULTIPLE PROGRAM UPDATE LOG
|
echo SPECIFIC PROGRAM UPDATE LOG
|
||||||
echo Date: %date% %time%
|
echo Date: %date% %time%
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
echo Programs to update: %PROGRAMS%
|
||||||
|
echo.
|
||||||
) > "%logfile%"
|
) > "%logfile%"
|
||||||
|
|
||||||
for %%p in (%PROGRAMS%) do (
|
REM Process comma-separated list
|
||||||
|
set "PROGRAMS=%PROGRAMS:, =,%"
|
||||||
|
set "PROGRAMS=%PROGRAMS: ,=,%"
|
||||||
|
|
||||||
|
for %%P in (%PROGRAMS%) do (
|
||||||
echo ---------------------------------------- >> "%logfile%"
|
echo ---------------------------------------- >> "%logfile%"
|
||||||
echo Updating: %%p >> "%logfile%"
|
echo Updating: %%P >> "%logfile%"
|
||||||
echo ---------------------------------------- >> "%logfile%"
|
echo ---------------------------------------- >> "%logfile%"
|
||||||
winget upgrade "%%p" >> "%logfile%" 2>&1
|
|
||||||
|
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 ======================================== >> "%logfile%"
|
||||||
|
echo Update process completed. >> "%logfile%"
|
||||||
|
|
||||||
cls
|
cls
|
||||||
type "%logfile%"
|
type "%logfile%"
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ========================================
|
|
||||||
echo All updates completed!
|
|
||||||
echo ========================================
|
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set /p EXPORT="Export log to file? (Y/N): "
|
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_Specific"
|
||||||
if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%logfile%" "Update_Multi_Log"
|
|
||||||
|
|
||||||
del "%logfile%" >nul 2>&1
|
del "%logfile%" >nul 2>&1
|
||||||
pause
|
pause
|
||||||
@@ -371,125 +347,84 @@ echo ========================================
|
|||||||
echo Uninstall Software
|
echo Uninstall Software
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
echo [1] View installed programs
|
||||||
where winget >nul 2>&1
|
echo [2] Uninstall by name
|
||||||
if %errorlevel% neq 0 (
|
echo [0] Back to menu
|
||||||
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.
|
echo.
|
||||||
|
set /p UNINSTALL_CHOICE="Select option: "
|
||||||
|
|
||||||
winget list | more
|
if "%UNINSTALL_CHOICE%"=="1" goto VIEW_FOR_UNINSTALL
|
||||||
|
if "%UNINSTALL_CHOICE%"=="2" goto UNINSTALL_BY_NAME
|
||||||
echo.
|
if "%UNINSTALL_CHOICE%"=="0" goto MENU
|
||||||
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
|
goto UNINSTALL_SOFTWARE
|
||||||
|
|
||||||
:UNINSTALL_SINGLE
|
:VIEW_FOR_UNINSTALL
|
||||||
cls
|
cls
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Uninstall Single Program
|
echo Installed Programs
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
set /p PROGRAM="Enter program ID or name: "
|
echo Scanning...
|
||||||
|
echo.
|
||||||
|
|
||||||
if "%PROGRAM%"=="" (
|
set "tempfile=%TEMP%\uninstall_list_%RANDOM%.tmp"
|
||||||
echo [ERROR] No program specified!
|
|
||||||
|
(
|
||||||
|
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
|
pause
|
||||||
goto UNINSTALL_SOFTWARE
|
goto UNINSTALL_SOFTWARE
|
||||||
)
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo WARNING: This will uninstall: %PROGRAM%
|
echo Searching for: %PROGRAM_NAME%
|
||||||
echo.
|
|
||||||
set /p CONFIRM="Are you sure? (Y/N): "
|
|
||||||
|
|
||||||
if /i not "%CONFIRM%"=="Y" goto UNINSTALL_SOFTWARE
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo Uninstalling %PROGRAM%...
|
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
winget uninstall "%PROGRAM%"
|
where winget >nul 2>&1
|
||||||
|
if %errorlevel%==0 (
|
||||||
if %errorlevel% neq 0 (
|
winget uninstall "%PROGRAM_NAME%"
|
||||||
echo.
|
) else (
|
||||||
echo [ERROR] Uninstallation failed!
|
echo [NOTE] Using Windows Settings...
|
||||||
echo.
|
start ms-settings:appsfeatures
|
||||||
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
|
pause
|
||||||
goto MENU
|
goto MENU
|
||||||
|
|
||||||
@@ -499,9 +434,6 @@ echo ========================================
|
|||||||
echo Full System Report
|
echo Full System Report
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
echo Generating comprehensive report...
|
|
||||||
echo This may take a moment...
|
|
||||||
echo.
|
|
||||||
|
|
||||||
set "tempfile=%TEMP%\full_report_%RANDOM%.tmp"
|
set "tempfile=%TEMP%\full_report_%RANDOM%.tmp"
|
||||||
|
|
||||||
@@ -513,58 +445,57 @@ echo Computer: %COMPUTERNAME%
|
|||||||
echo User: %USERNAME%
|
echo User: %USERNAME%
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
echo.
|
|
||||||
echo [INSTALLED SOFTWARE - 64-BIT]
|
|
||||||
echo ----------------------------------------
|
|
||||||
) > "%tempfile%"
|
) > "%tempfile%"
|
||||||
|
|
||||||
for /f "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
|
echo [1/4] System Information...
|
||||||
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 [SYSTEM INFORMATION]
|
||||||
echo [INSTALLED SOFTWARE - 32-BIT]
|
|
||||||
echo ----------------------------------------
|
echo ----------------------------------------
|
||||||
) >> "%tempfile%"
|
) >> "%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 "tokens=*" %%a in ('reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
|
||||||
set "hasname="
|
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do (
|
||||||
set "hasver="
|
set /a TOTALSOFT+=1
|
||||||
for /f "skip=2 tokens=2*" %%b in ('reg query "%%a" /v DisplayName 2^>nul') do set "hasname=%%c"
|
echo %%c >> "%tempfile%"
|
||||||
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. >> "%tempfile%"
|
||||||
|
echo Total: !TOTALSOFT! programs >> "%tempfile%"
|
||||||
|
echo. >> "%tempfile%"
|
||||||
|
|
||||||
|
echo [3/4] Running Processes...
|
||||||
(
|
(
|
||||||
echo.
|
echo [RUNNING PROCESSES]
|
||||||
echo [INSTALLED SOFTWARE - USER]
|
|
||||||
echo ----------------------------------------
|
echo ----------------------------------------
|
||||||
) >> "%tempfile%"
|
) >> "%tempfile%"
|
||||||
|
tasklist >> "%tempfile%"
|
||||||
|
echo. >> "%tempfile%"
|
||||||
|
|
||||||
for /f "tokens=*" %%a in ('reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 2^>nul') do (
|
echo [4/4] Available Updates...
|
||||||
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 [AVAILABLE UPDATES]
|
||||||
echo.
|
echo ----------------------------------------
|
||||||
echo ========================================
|
|
||||||
echo AVAILABLE UPDATES
|
|
||||||
echo ========================================
|
|
||||||
echo.
|
|
||||||
) >> "%tempfile%"
|
) >> "%tempfile%"
|
||||||
|
|
||||||
where winget >nul 2>&1
|
where winget >nul 2>&1
|
||||||
if %errorlevel% equ 0 (
|
if %errorlevel%==0 (
|
||||||
winget upgrade >> "%tempfile%" 2>&1
|
winget upgrade >> "%tempfile%" 2>&1
|
||||||
) else (
|
) else (
|
||||||
echo [NOTE] Winget is not installed. >> "%tempfile%"
|
echo [NOTE] Winget is not installed. >> "%tempfile%"
|
||||||
@@ -577,8 +508,7 @@ cls
|
|||||||
type "%tempfile%"
|
type "%tempfile%"
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set /p EXPORT="Export report to file? (Y/N): "
|
if /i "%ENABLE_EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Full_System_Report"
|
||||||
if /i "%EXPORT%"=="Y" call :EXPORT_FILE "%tempfile%" "Full_System_Report"
|
|
||||||
|
|
||||||
del "%tempfile%" >nul 2>&1
|
del "%tempfile%" >nul 2>&1
|
||||||
pause
|
pause
|
||||||
@@ -586,39 +516,28 @@ goto MENU
|
|||||||
|
|
||||||
:EXPORT_FILE
|
:EXPORT_FILE
|
||||||
set "source=%~1"
|
set "source=%~1"
|
||||||
set "prefix=%~2"
|
set "basename=%~2"
|
||||||
set "timestamp=%date:~-4%%date:~-7,2%%date:~-10,2%_%time:~0,2%%time:~3,2%%time:~6,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 "timestamp=%timestamp: =0%"
|
set "exportfile=%exportfile: =0%"
|
||||||
set "output=%USERPROFILE%\Desktop\%prefix%_%timestamp%.txt"
|
|
||||||
|
|
||||||
copy "%source%" "%output%" >nul
|
copy "%source%" "%exportfile%" >nul 2>&1
|
||||||
|
if %errorlevel%==0 (
|
||||||
if %errorlevel% neq 0 (
|
|
||||||
echo.
|
echo.
|
||||||
echo [ERROR] Export failed!
|
echo [SUCCESS] Report exported to:
|
||||||
|
echo %exportfile%
|
||||||
echo.
|
echo.
|
||||||
echo POSSIBLE REASONS:
|
) else (
|
||||||
echo - Desktop folder not accessible
|
echo.
|
||||||
echo - Insufficient permissions
|
echo [ERROR] Could not export file!
|
||||||
echo - Disk full
|
|
||||||
echo.
|
echo.
|
||||||
echo Trying alternative location...
|
|
||||||
set "output=%TEMP%\%prefix%_%timestamp%.txt"
|
|
||||||
copy "%source%" "!output!" >nul
|
|
||||||
)
|
)
|
||||||
|
exit /b
|
||||||
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
|
:EXIT
|
||||||
cls
|
cls
|
||||||
echo Exiting...
|
echo ========================================
|
||||||
timeout /t 1 /nobreak >nul
|
echo Thank you for using Software Management Tool
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
timeout /t 2 >nul
|
||||||
exit
|
exit
|
||||||
Reference in New Issue
Block a user