sunshine-sdk/src_assets/windows/misc/path/update-path.bat

112 lines
3.3 KiB
Batchfile

@echo off
setlocal EnableDelayedExpansion
rem Check if parameter is provided
if "%~1"=="" (
echo Usage: %0 [add^|remove]
echo add - Adds Sunshine directories to system PATH
echo remove - Removes Sunshine directories from system PATH
exit /b 1
)
rem Get sunshine root directory
for %%I in ("%~dp0\..") do set "ROOT_DIR=%%~fI"
echo Sunshine root directory: !ROOT_DIR!
rem Define directories to add to path
set "PATHS_TO_MANAGE[0]=!ROOT_DIR!"
set "PATHS_TO_MANAGE[1]=!ROOT_DIR!\tools"
rem System path registry location
set "KEY_NAME=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set "VALUE_NAME=Path"
rem Get the current path
for /f "tokens=2*" %%A in ('reg query "%KEY_NAME%" /v "%VALUE_NAME%"') do set "CURRENT_PATH=%%B"
echo Current path: !CURRENT_PATH!
rem Check if adding to path
if /i "%~1"=="add" (
set "NEW_PATH=!CURRENT_PATH!"
rem Process each directory to add
for /L %%i in (0,1,1) do (
set "DIR_TO_ADD=!PATHS_TO_MANAGE[%%i]!"
rem Check if path already contains this directory
echo "!CURRENT_PATH!" | findstr /i /c:"!DIR_TO_ADD!" > nul
if !ERRORLEVEL!==0 (
echo !DIR_TO_ADD! already in path
) else (
echo Adding to path: !DIR_TO_ADD!
set "NEW_PATH=!NEW_PATH!;!DIR_TO_ADD!"
)
)
rem Only update if path was changed
if "!NEW_PATH!" neq "!CURRENT_PATH!" (
rem Set the new path in the registry
reg add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_EXPAND_SZ /d "!NEW_PATH!" /f
if !ERRORLEVEL!==0 (
echo Successfully added Sunshine directories to PATH
) else (
echo Failed to add Sunshine directories to PATH
)
) else (
echo No changes needed to PATH
)
exit /b !ERRORLEVEL!
)
rem Check if removing from path
if /i "%~1"=="remove" (
set "CHANGES_MADE=0"
rem Process each directory to remove
for /L %%i in (0,1,1) do (
set "DIR_TO_REMOVE=!PATHS_TO_MANAGE[%%i]!"
rem Check if path contains this directory
echo "!CURRENT_PATH!" | findstr /i /c:"!DIR_TO_REMOVE!" > nul
if !ERRORLEVEL!==0 (
echo Removing from path: !DIR_TO_REMOVE!
rem Build a new path by parsing and filtering the current path
set "NEW_PATH="
for %%p in ("!CURRENT_PATH:;=" "!") do (
set "PART=%%~p"
if /i "!PART!" NEQ "!DIR_TO_REMOVE!" (
if defined NEW_PATH (
set "NEW_PATH=!NEW_PATH!;!PART!"
) else (
set "NEW_PATH=!PART!"
)
)
)
set "CURRENT_PATH=!NEW_PATH!"
set "CHANGES_MADE=1"
) else (
echo !DIR_TO_REMOVE! not found in path
)
)
rem Only update if path was changed
if "!CHANGES_MADE!"=="1" (
rem Set the new path in the registry
reg add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_EXPAND_SZ /d "!CURRENT_PATH!" /f
if !ERRORLEVEL!==0 (
echo Successfully removed Sunshine directories from PATH
) else (
echo Failed to remove Sunshine directories from PATH
)
) else (
echo No changes needed to PATH
)
exit /b !ERRORLEVEL!
)
echo Unknown parameter: %~1
echo Usage: %0 [add^|remove]
exit /b 1