22setlocal 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+ :: Определяем путь к логу. Используем кавычки.
1013set " LOG_FILE = %~dp0 setup_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: Проверка наличия файлов и восстановление ---
3237set " SRC_DIR = %~dp0 src\"
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
3741call :recover_files
3842if errorlevel 1 (
@@ -44,42 +48,47 @@ if errorlevel 1 (
4448:install_main
4549set " java_install_path = "
4650
47- :: [FIX] Передаем путь через переменную окружения, чтобы избежать проблем с кириллицей в аргументах
51+ :: Передаем путь через переменную окружения (безопасно для кириллицы)
4852set " PS_CONFIG_PATH = !SRC_DIR! config.json"
4953
54+ :: Читаем конфиг через PowerShell
5055for /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+ :: Дефолтный путь, если конфиг не прочитан
5460if not defined java_install_path set " java_install_path = %ProgramFiles% \Java"
5561set " scripts_target_dir = %java_install_path% \scripts"
5662
5763call :log_and_echo " !INFO_INSTALL_TO! -> !scripts_target_dir! "
5864if not exist " !scripts_target_dir! " ( mkdir " !scripts_target_dir! " & call :log_and_echo " !INFO_DIR_CREATED! " )
5965
6066call :log_and_echo " !INFO_COPYING! "
61- :: Использование xcopy с кавычками обычно безопасно для кириллицы
67+ :: Копирование файлов
6268xcopy " !SRC_DIR! *" " !scripts_target_dir! \" /E /I /Y /Q > nul
6369
6470call :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+
7078copy /y " !scripts_target_dir! \set-java.bat" " !scripts_target_dir! \javas.bat" > nul
7179copy /y " !scripts_target_dir! \set-java.bat" " !scripts_target_dir! \jav.bat" > nul
7280
7381call :log_and_echo " !INFO_PATH! "
74- :: [FIX] Передача целевого пути через переменную окружения
82+
83+ :: Обновление PATH через PowerShell
7584set " PS_TARGET_DIR = !scripts_target_dir! "
7685powershell -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
7988echo . & call :log_and_echo " !INFO_SUCCESS! " & call :log_and_echo " !INFO_RESTART! " & echo .
8089pause
8190
82- :: --- Шаг 6: Открытие нового терминала с запущенным set-java ---
91+ :: --- Шаг 6: Открытие нового терминала ---
8392where wt.exe > nul 2 >& 1
8493if %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
102111set " SYS_LANG = en"
103112for /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 = Файлы успешно восстановлены."
145159goto :eof
146160
147161:recover_files
@@ -183,7 +197,6 @@ if %ERRORLEVEL% EQU 0 (
183197
184198if errorlevel 1 ( call :log_and_echo " !PROMPT_DOWNLOAD_FAIL! " & exit /b 1 )
185199
186- :: [FIX] Распаковка с использованием переменных окружения
187200powershell -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" (
201214set " SRC_DIR = !EXTRACT_DIR! \src\"
202215call :log_and_echo " !INFO_DOWNLOAD_SUCCESS! "
203216
204- exit /b
217+ exit /b
0 commit comments