| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- @echo off
- REM RASC version handler 2024-08-05
- setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
- REM Initialisations
- set "RascVersionFileHeader=# RASC version and installation file"
- set "RascDescRootKey=SOFTWARE\Renesas\RASC\Installations"
- set "VersionUnknown=Unknown"
- set "RascVersionValueName=Version"
- set "RascExeValueName=ExePath"
- set "RascSearchPath=C:\Renesas"
- set /a NumRascs=0
- set "TargetRascVersion="
- set "TargetRascExe="
- set "TargetRascVersionDiffers="
- REM First parameter is (possibly non-existent) file containing RASC version to invoke
- set "RascVersionFile=%~1"
- REM Second parameter specifies non-interactive mode
- set "NonInteractiveMode=%~2"
- REM Extract specific RASC version from file
- REM echo "%RascVersionFile%"
- if exist "%RascVersionFile%" (
- REM echo DEBUG: Have version file: "%RascVersionFile%"
- set /a idx=0
- for /f "usebackq tokens=*" %%a in ("%RascVersionFile%") do (
- if !idx! EQU 0 (
- if not "%%a" == "%RascVersionFileHeader%" (
- REM echo DEBUG: Header doesn't match
- goto _EndVersionFileParse
- )
- )
- if !idx! EQU 1 (
- set "TargetRascVersion=%%a"
- )
- if !idx! EQU 2 (
- set "TargetRascExe=%%a"
- )
- set /a idx+=1
- )
- )
- :_EndVersionFileParse
- REM echo DEBUG: Target version: "%TargetRascVersion%"
- REM echo DEBUG: Target exe: "%TargetRascExe%"
- REM Search through registry RASC descriptions for match on exe path and version
- for %%h in (HKCU HKLM) do (
- for %%v in (32 64) do (
- for /f "usebackq skip=1 tokens=*" %%a in (`reg query "%%h\%RascDescRootKey%" /reg:%%v 2^>nul`) do (
- set "RascDescKey=%%a"
- set "RascVersion="
- set "RascExe="
- REM echo DEBUG: Desc Key: !RascDescKey!
- for /f "usebackq skip=2 tokens=3" %%b in (`reg query "!RascDescKey!" /v "%RascVersionValueName%" /reg:%%v 2^>nul`) do (
- set "RascVersion=%%b"
- )
- REM echo DEBUG: Version: !RascVersion!
- for /f "usebackq skip=2 tokens=2*" %%b in (`reg query "!RascDescKey!" /v "%RascExeValueName%" /reg:%%v 2^>nul`) do (
- REM %%b is value name, so %%c is the value - supports values with spaces
- set "RascExe=%%c"
- )
- REM echo DEBUG: Exe: !RascExe!
- if not defined RascExe (
- REM Error - unable to extract executable
- set ErrorMessage=Unable to extract RASC executable path from the registry
- goto _Error
- )
- REM Check if exe exists, otherwise assume it's been removed
- if exist "!RascExe!" (
- REM Check for specified target version and exe path match
- if defined RascVersion (
- if defined TargetRascVersion (
- if /i "!RascExe!" == "%TargetRascExe%" (
- REM echo "!RascVersion!"
- REM echo "%TargetRascVersion%"
- if "!RascVersion!" == "%TargetRascVersion%" (
- REM echo DEBUG: Found match
- goto _RascVersionRewrite
- ) else (
- REM Indicate target RASC has a different version than
- REM the registry entry. In this case, target RASC has
- REM changed, so possibly prompt the user to select a
- REM RASC again
- set "TargetRascVersionDiffers=true"
- )
- )
- )
- ) else (
- REM Error - unable to extract version
- set ErrorMessage=Unable to extract RASC version from the registry
- goto _Error
- )
- call :SubAddFoundRasc "!RascExe!" "!RascVersion!"
- )
- )
- )
- )
- REM If target RASC exists and doesn't differ from the registry version (i.e.
- REM was not found in the registry), just run it
- if defined TargetRascExe (
- if exist "%TargetRascExe%" (
- if not defined TargetRascVersionDiffers (
- set "RascExe=%TargetRascExe%"
- set "RascVersion=%VersionUnknown%"
- goto _RascVersionRewrite
- )
- )
- )
- if %NumRascs% EQU 0 (
- REM No entries found in the registry, search C:\Renesas\ as fallback
- echo/
- echo Searching in "%RascSearchPath%" for RA Smart Configurator installations ...
- for /f "usebackq tokens=*" %%a in (`dir "%RascSearchPath%\rasc.exe" /s /b 2^>nul`) do (
- if not "%%a" == "" (
- call :SubAddFoundRasc "%%a" "%VersionUnknown%"
- )
- )
- )
- if %NumRascs% EQU 0 (
- REM Still no RASCs found - give up
- set ErrorMessage=No "RA Smart Configurator" installations found, download one from renesas.com
- goto _Error
- )
- if %NumRascs% EQU 1 (
- set "RascExe=%RascExeList[0]%"
- set "RascVersion=%RascVersionList[0]%"
- goto _RascVersionRewrite
- )
- REM Exit with status 1 if choice required in non-interactive mode
- if not "%NonInteractiveMode%"=="" exit /b 1
- REM Prompt for user to choose from multiple RASCs
- echo/
- echo Multiple RA Smart Configurators installed:
- set /a RascIdxMax=%NumRascs% - 1
- set Choices=""
- for /l %%a in (0,1,%RascIdxMax%) do (
- echo %%a: Version !RascVersionList[%%a]! ^("!RascExeList[%%a]!"^)
- set "Choices=!Choices!%%a"
- )
- echo/
- set /a ChosenIdx=%NumRascs%
- if %RascIdxMax% GTR 9 (
- set /p InputIdx=Select which one to run [0-%RascIdxMax%]?
- REM Check if the input string is a number
- set "NonNumber=" & for /f "delims=0123456789" %%i in ("!InputIdx!") do set "NonNumber=%%i"
- if not defined NonNumber (
- set /a ChosenIdx=!InputIdx!
- )
- ) else (
- choice /c %Choices% /m "Select which one to run"
- set /a ChosenIdx=!ERRORLEVEL! - 1
- )
- if %ChosenIdx% GEQ %NumRascs% (
- REM Out of range
- set ErrorMessage=Invalid selection
- goto _Error
- )
- set "RascExe=!RascExeList[%ChosenIdx%]!"
- set "RascVersion=!RascVersionList[%ChosenIdx%]!"
- :_RascVersionRewrite
- REM Carefully re-write specific version file, if required
- if exist "%RascVersionFile%" (
- if not defined TargetRascVersion (
- if not defined TargetRascExe (
- REM Unexpected version file contents, skip rewriting
- goto _EndRascVersionRewrite
- )
- )
- )
- if "!RascVersion!" == "%TargetRascVersion%" (
- if /i "!RascExe!" == "%TargetRascExe%" (
- REM Version file already up-to-date, skip rewriting
- goto _EndRascVersionRewrite
- )
- )
- echo %RascVersionFileHeader%>"%RascVersionFile%"
- echo %RascVersion%>>"%RascVersionFile%"
- echo %RascExe%>>"%RascVersionFile%"
- :_EndRascVersionRewrite
- goto :EOF
- REM Add specified RASC to pseudo-list
- REM Parameters:
- REM 1: RascExe
- REM 2: RascVersion
- :SubAddFoundRasc
- set "RascExeList[%NumRascs%]=%~1"
- set "RascVersionList[%NumRascs%]=%~2"
- set /a NumRascs+=1
- goto :EOF
- :_Error
- echo/
- echo %ErrorMessage%
- if "%NonInteractiveMode%"=="" pause
- exit /b 1
|