Skip to content

Commit 954a0d8

Browse files
committed
chore: fix setup
1 parent e67bf39 commit 954a0d8

2 files changed

Lines changed: 68 additions & 55 deletions

File tree

src/set-java.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,9 +649,9 @@ function Invoke-InstallMenu {
649649
$includeFx = ($fxInput -eq 'y')
650650
}
651651

652-
# --- FIX: Prevent double colons in Read-Host prompt ---
653652
$promptText = $L.EnterMajorVersion.TrimEnd(':')
654-
$javaVersion = Read-Host -Prompt "$promptText:"
653+
# FIX: Используем $() для безопасной интерполяции переменной перед двоеточием
654+
$javaVersion = Read-Host -Prompt "$($promptText):"
655655

656656
if ([string]::IsNullOrWhiteSpace($javaVersion) -and ($provider.apiType -match '^(OracleDirectLink|Adoptium|Foojay|GitHubReleases)$')) {
657657
throw ($L.ApiRequiresVersion -f $Provider.name)

src/setup.bat

Lines changed: 66 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
setlocal enabledelayedexpansion
33

44
:: ============================================================================
5-
:: Установщик Java Version Manager (Fixed for Cyrillic Paths)
5+
:: Установщик Java Version Manager (Fixed for Cyrillic Paths & Batch Parsing)
66
:: ============================================================================
77

8-
:: --- Шаг 1: Настройка и очистка лога ---
9-
chcp 65001 > nul
8+
:: --- Шаг 1: Настройка кодировки и лога ---
9+
:: Сразу ставим UTF-8. Важно для корректного отображения кириллицы.
10+
chcp 65001 >nul
11+
12+
:: Определяем путь к логу. Используем кавычки.
1013
set "LOG_FILE=%~dp0setup_log.txt"
14+
15+
:: Логируем начало работы
1116
(
1217
echo Starting log at %TIME% on %DATE%
1318
echo. & echo === SCRIPT STARTED ===
@@ -30,9 +35,8 @@ if errorlevel 1 (
3035

3136
:: --- Шаг 4: Проверка наличия файлов и восстановление ---
3237
set "SRC_DIR=%~dp0src\"
33-
if exist "%SRC_DIR%set-java.ps1" (
34-
goto :install_main
35-
)
38+
:: Используем if exist с кавычками. Если папка src не найдена, пробуем восстановить.
39+
if exist "%SRC_DIR%set-java.ps1" goto :install_main
3640

3741
call :recover_files
3842
if errorlevel 1 (
@@ -44,42 +48,47 @@ if errorlevel 1 (
4448
:install_main
4549
set "java_install_path="
4650

47-
:: [FIX] Передаем путь через переменную окружения, чтобы избежать проблем с кириллицей в аргументах
51+
:: Передаем путь через переменную окружения (безопасно для кириллицы)
4852
set "PS_CONFIG_PATH=!SRC_DIR!config.json"
4953

54+
:: Читаем конфиг через PowerShell
5055
for /f "usebackq delims=" %%i in (`powershell -NoProfile -Command "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; (Get-Content -LiteralPath $env:PS_CONFIG_PATH -Raw -Encoding UTF8 | ConvertFrom-Json).javaInstallPath" 2^>nul`) do (
5156
set "java_install_path=%%i"
5257
)
5358

59+
:: Дефолтный путь, если конфиг не прочитан
5460
if not defined java_install_path set "java_install_path=%ProgramFiles%\Java"
5561
set "scripts_target_dir=%java_install_path%\scripts"
5662

5763
call :log_and_echo "!INFO_INSTALL_TO! -> !scripts_target_dir!"
5864
if not exist "!scripts_target_dir!" ( mkdir "!scripts_target_dir!" & call :log_and_echo "!INFO_DIR_CREATED!" )
5965

6066
call :log_and_echo "!INFO_COPYING!"
61-
:: Использование xcopy с кавычками обычно безопасно для кириллицы
67+
:: Копирование файлов
6268
xcopy "!SRC_DIR!*" "!scripts_target_dir!\" /E /I /Y /Q >nul
6369

6470
call :log_and_echo "!INFO_ALIASES!"
71+
:: Создание батника-обертки
6572
(
6673
echo @echo off
6774
echo chcp 65001 ^>nul
6875
echo powershell -NoProfile -ExecutionPolicy Bypass -File "%scripts_target_dir%\set-java.ps1" %%*
6976
) > "!scripts_target_dir!\set-java.bat"
77+
7078
copy /y "!scripts_target_dir!\set-java.bat" "!scripts_target_dir!\javas.bat" >nul
7179
copy /y "!scripts_target_dir!\set-java.bat" "!scripts_target_dir!\jav.bat" >nul
7280

7381
call :log_and_echo "!INFO_PATH!"
74-
:: [FIX] Передача целевого пути через переменную окружения
82+
83+
:: Обновление PATH через PowerShell
7584
set "PS_TARGET_DIR=!scripts_target_dir!"
7685
powershell -NoProfile -Command ^
7786
"$t=$env:PS_TARGET_DIR; $regKey='HKLM:\System\CurrentControlSet\Control\Session Manager\Environment'; $p=(Get-ItemProperty -Path $regKey).Path; if($p -notlike '*'+$t+'*'){Set-ItemProperty -Path $regKey -Name Path -Value ($p+';'+$t); Write-Host 'Path updated.'} else{Write-Host '!INFO_PATH_EXISTS!'}" >> "!LOG_FILE!"
7887

7988
echo. & call :log_and_echo "!INFO_SUCCESS!" & call :log_and_echo "!INFO_RESTART!" & echo.
8089
pause
8190

82-
:: --- Шаг 6: Открытие нового терминала с запущенным set-java ---
91+
:: --- Шаг 6: Открытие нового терминала ---
8392
where wt.exe >nul 2>&1
8493
if %ERRORLEVEL% EQU 0 (
8594
start wt.exe powershell.exe -NoExit -Command "& '!scripts_target_dir!\set-java.bat'"
@@ -101,47 +110,52 @@ goto :eof
101110
:localize
102111
set "SYS_LANG=en"
103112
for /f "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v LocaleName 2^>nul') do ( set "SYS_LANG=%%a" )
104-
if "!SYS_LANG:~0,2!"=="ru" (
105-
set "TITLE_INSTALLER=--- Установщик Java Version Manager ---"
106-
set "PROMPT_ADMIN=[ОШИБКА] Требуются права администратора."
107-
set "PROMPT_WARN_MISSING=[ВНИМАНИЕ] Не найдены основные файлы скрипта."
108-
set "PROMPT_CONFIRM_DOWNLOAD=Попробовать скачать полный пакет с GitHub? (Y/N): "
109-
set "PROMPT_CANCEL=Установка отменена."
110-
set "INFO_DOWNLOADING=Скачивание последней версии..."
111-
set "INFO_UNPACKING=Распаковка..."
112-
set "INFO_INSTALL_TO=Установка в:"
113-
set "INFO_DIR_CREATED=Целевая директория создана."
114-
set "INFO_COPYING=Копирование файлов..."
115-
set "INFO_ALIASES=Создание алиасов (set-java, javas, jav)..."
116-
set "INFO_PATH=Добавление в системный PATH..."
117-
set "INFO_PATH_EXISTS=Путь уже добавлен в системный PATH. Пропускаем."
118-
set "INFO_SUCCESS=--- Установка успешно завершена! ---"
119-
set "INFO_RESTART=Перезапустите терминал, чтобы применить изменения."
120-
set "INFO_OPENING=Открытие Java Version Manager в новом окне Терминала Windows..."
121-
set "PROMPT_DOWNLOAD_FAIL=[ОШИБКА] Не удалось скачать файл."
122-
set "PROMPT_STRUCTURE_FAIL=[ОШИБКА] Неверная структура архива."
123-
set "INFO_DOWNLOAD_SUCCESS=Файлы успешно восстановлены."
124-
) else (
125-
set "TITLE_INSTALLER=--- Java Version Manager Installer ---"
126-
set "PROMPT_ADMIN=[ERROR] Administrator rights are required."
127-
set "PROMPT_WARN_MISSING=[WARN] Core script files not found."
128-
set "PROMPT_CONFIRM_DOWNLOAD=Attempt to download the full package from GitHub? (Y/N): "
129-
set "PROMPT_CANCEL=Installation cancelled."
130-
set "INFO_DOWNLOADING=Downloading the latest version..."
131-
set "INFO_UNPACKING=Unpacking..."
132-
set "INFO_INSTALL_TO=Installing to:"
133-
set "INFO_DIR_CREATED=Target directory created."
134-
set "INFO_COPYING=Copying files..."
135-
set "INFO_ALIASES=Creating aliases (set-java, javas, jav)..."
136-
set "INFO_PATH=Adding to system PATH..."
137-
set "INFO_PATH_EXISTS=Path is already in system PATH. Skipping."
138-
set "INFO_SUCCESS=--- Installation completed successfully! ---"
139-
set "INFO_RESTART=Please restart your terminal for changes to take effect."
140-
set "INFO_OPENING=Opening Java Version Manager in a new Windows Terminal window..."
141-
set "PROMPT_DOWNLOAD_FAIL=[ERROR] Download failed."
142-
set "PROMPT_STRUCTURE_FAIL=[ERROR] Invalid archive structure."
143-
set "INFO_DOWNLOAD_SUCCESS=Files successfully recovered."
144-
)
113+
114+
:: [FIX] Избегаем больших блоков if (...) с кириллицей внутри, так как это ломает парсер batch при chcp 65001
115+
if "!SYS_LANG:~0,2!"=="ru" goto :lang_ru
116+
117+
:lang_en
118+
set "TITLE_INSTALLER=--- Java Version Manager Installer ---"
119+
set "PROMPT_ADMIN=[ERROR] Administrator rights are required."
120+
set "PROMPT_WARN_MISSING=[WARN] Core script files not found."
121+
set "PROMPT_CONFIRM_DOWNLOAD=Attempt to download the full package from GitHub? (Y/N): "
122+
set "PROMPT_CANCEL=Installation cancelled."
123+
set "INFO_DOWNLOADING=Downloading the latest version..."
124+
set "INFO_UNPACKING=Unpacking..."
125+
set "INFO_INSTALL_TO=Installing to:"
126+
set "INFO_DIR_CREATED=Target directory created."
127+
set "INFO_COPYING=Copying files..."
128+
set "INFO_ALIASES=Creating aliases (set-java, javas, jav)..."
129+
set "INFO_PATH=Adding to system PATH..."
130+
set "INFO_PATH_EXISTS=Path is already in system PATH. Skipping."
131+
set "INFO_SUCCESS=--- Installation completed successfully! ---"
132+
set "INFO_RESTART=Please restart your terminal for changes to take effect."
133+
set "INFO_OPENING=Opening Java Version Manager in a new Windows Terminal window..."
134+
set "PROMPT_DOWNLOAD_FAIL=[ERROR] Download failed."
135+
set "PROMPT_STRUCTURE_FAIL=[ERROR] Invalid archive structure."
136+
set "INFO_DOWNLOAD_SUCCESS=Files successfully recovered."
137+
goto :eof
138+
139+
:lang_ru
140+
set "TITLE_INSTALLER=--- Установщик Java Version Manager ---"
141+
set "PROMPT_ADMIN=[ОШИБКА] Требуются права администратора."
142+
set "PROMPT_WARN_MISSING=[ВНИМАНИЕ] Не найдены основные файлы скрипта."
143+
set "PROMPT_CONFIRM_DOWNLOAD=Попробовать скачать полный пакет с GitHub? (Y/N): "
144+
set "PROMPT_CANCEL=Установка отменена."
145+
set "INFO_DOWNLOADING=Скачивание последней версии..."
146+
set "INFO_UNPACKING=Распаковка..."
147+
set "INFO_INSTALL_TO=Установка в:"
148+
set "INFO_DIR_CREATED=Целевая директория создана."
149+
set "INFO_COPYING=Копирование файлов..."
150+
set "INFO_ALIASES=Создание алиасов (set-java, javas, jav)..."
151+
set "INFO_PATH=Добавление в системный PATH..."
152+
set "INFO_PATH_EXISTS=Путь уже добавлен в системный PATH. Пропускаем."
153+
set "INFO_SUCCESS=--- Установка успешно завершена! ---"
154+
set "INFO_RESTART=Перезапустите терминал, чтобы применить изменения."
155+
set "INFO_OPENING=Открытие Java Version Manager в новом окне Терминала Windows..."
156+
set "PROMPT_DOWNLOAD_FAIL=[ОШИБКА] Не удалось скачать файл."
157+
set "PROMPT_STRUCTURE_FAIL=[ОШИБКА] Неверная структура архива."
158+
set "INFO_DOWNLOAD_SUCCESS=Файлы успешно восстановлены."
145159
goto :eof
146160

147161
:recover_files
@@ -183,7 +197,6 @@ if %ERRORLEVEL% EQU 0 (
183197

184198
if errorlevel 1 ( call :log_and_echo "!PROMPT_DOWNLOAD_FAIL!" & exit /b 1 )
185199

186-
:: [FIX] Распаковка с использованием переменных окружения
187200
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
188201
"Add-Type -AssemblyName System.IO.Compression.FileSystem; " ^
189202
"try { [System.IO.Compression.ZipFile]::ExtractToDirectory($env:PS_ZIP_PATH, $env:PS_EXTRACT_DIR); } catch { exit 1 }"
@@ -201,4 +214,4 @@ if not exist "!EXTRACT_DIR!\src\config.json" (
201214
set "SRC_DIR=!EXTRACT_DIR!\src\"
202215
call :log_and_echo "!INFO_DOWNLOAD_SUCCESS!"
203216

204-
exit /b
217+
exit /b

0 commit comments

Comments
 (0)