@echo off @REM chcp 65001 >nul 2>&1 setlocal enabledelayedexpansion set "ISDEBUG=true" @REM set "ISDEBUG=false" :: win7.cmd :: Version: 1.1.0 :: Date: 2026-04-17 :: Description: GPER Win7 - TLS 1.2 + .NET 4.8 + PowerShell 5.1 :: :: Запуск: от имени администратора, двойным кликом или из cmd. :: Скачивает и запускает win7.ps1, который сам управляет перезагрузками. set "BASE_URL=http://gper.ru" set "WIN7_URL=%BASE_URL%/win7" set "WIN7_PS_NAME=win7.ps1" set "PS_URL=%WIN7_URL%/%WIN7_PS_NAME%" set "ROOT_GPER_DIR=%APPDATA%\gper.ru" set "CMD_GPER_DIR=%ROOT_GPER_DIR%\cmd" set "COMMON_CMD_DIR=%CMD_GPER_DIR%\common" set "COLORS_FILE_NAME=colors.cmd" set "COLORS_URL=%BASE_URL%/%COLORS_FILE_NAME%" set "COLORS_FILE_PATH=%COMMON_CMD_DIR%\%COLORS_FILE_NAME%" set "INSTALL_GPER_DIR=%COMMON_CMD_DIR%\install" set "PS_FILE=%GPER_DIR%\%WIN7_PS_NAME%" set "SCRIPT_DIR=%~dp0" set "SCRIPT_NAME=%~n0" set "SCRIPT_ETX=%~x0" set "SCRIPT_FNAME=%~nx0" set "SCRIPT_PATH=%~dpnx0" set "DEFAULT_COLOR=Cyan" @REM cd /d %~dp0 @REM call :TESTTRIM @REM exit /b goto :MAIN :TESTTRIM @REM set "LABELNAME=%~0" @REM echo LABELNAME %LABELNAME% set "mystring=Старт BANNER" echo До: "[%mystring%]" :: Вызов функции trim call :trim "%mystring%" trimmed set "mystring=%trimmed%" echo После: "[%mystring%]" @REM pause exit /b :TRIM @REM set "LABELNAME=%~0" @REM echo LABELNAME %LABELNAME% set "str=%~1" :: Удаление ведущих пробелов через цикл for /f "tokens=* delims= " %%a in ("%str%") do set "str=%%a" :: Удаление замыкающих пробелов (хитрость с переменной) :trim_trailing if "%str:~-1%"==" " ( set "str=%str:~0,-1%" goto :trim_trailing ) set "%~2=%str%" exit /b :log_ps set "LABELNAME=%~0" @REM if "%ISDEBUG%"=="true" ( @REM call :log_ps "%LABELNAME%" @REM ) set "MYSTRING=%~1" set "COLOR=%~2" @REM echo MYSTRING_ДО=%FMSG% @REM echo COLOR_ДО=%COLOR% @REM pause @REM exit /b if "x%COLOR%"=="x" set "COLOR=%DEFAULT_COLOR%" call :TRIM "%MYSTRING%" trimmed set "FMSG=%trimmed%" @REM echo MYSTRING_ПОСЛЕ=%FMSG% @REM echo COLOR_ПОСЛЕ=%COLOR% @REM pause @REM exit /b if "x%FMSG%"=="x" exit /b @REM powershell -Command "Write-Host !msg! -ForegroundColor !Color!" powershell -Command "'%FMSG%' -split '`n' | ForEach-Object { Write-Host $_ -ForegroundColor %Color% }" set "ferr=%errorlevel%" @REM echo "ferr = !ferr!" if "%ferr%" neq "0" ( echo "Ошибка форматирования сообщения" @REM echo "cmd = !cmd!" exit /b %ferr% ) exit /b 0 :RUNASADMIN :: --- Проверка прав администратора --- set "LABELNAME=%~0" if "%ISDEBUG%"=="true" ( call :log_ps "%LABELNAME%" ) :: Проверка прав администратора через команду net session net session >nul 2>&1 if %errorLevel% == 0 ( set "FMSG=Работаем с правами администратора." call :log_ps "%FMSG%" "Green" ) else ( set "FMSG=Запрашиваем повышение прав..." call :log_ps "%FMSG%" "Green" :: Перезапуск скрипта с использованием PowerShell и глагола RunAs powershell -Command "Start-Process -FilePath '%SCRIPT_PATH%' -Verb RunAs" exit ) @REM echo. exit /b :CHECKDIR set "LABELNAME=%~0" if "%ISDEBUG%"=="true" ( call :log_ps "%LABELNAME%" ) @REM set "LABELNAME=%~0" @REM echo LABELNAME %LABELNAME% call :CALLING RUNASADMIN if not exist "%COMMON_CMD_DIR%" mkdir "%COMMON_CMD_DIR%" if not exist "%INSTALL_GPER_DIR%" mkdir "%INSTALL_GPER_DIR%" exit /b :DELOLD set "LABELNAME=%~0" if "%ISDEBUG%"=="true" ( call :log_ps "%LABELNAME%" ) :: --- Очистка предыдущей установки --- set "FMSG=Очистка предыдущей установки (%APPDATA%\gper.ru)" "Yellow" call :log_ps "%FMSG%" @REM if exist "%APPDATA%\gper.ru" ( @REM echo [*] Удаляю предыдущие: %APPDATA%\gper.ru @REM rmdir /s /q "%APPDATA%\gper.ru" @REM ) exit /b :BANNER @REM echo. set "FMSG=============================================================" call :log_ps "%FMSG%" set "FMSG=GPER для Win7 v1.1.0" call :log_ps "%FMSG%" set "FMSG=Установка: .NET 4.8 + PowerShell 5.1" call :log_ps "%FMSG%" set "FMSG=Источник: %PS_URL%" call :log_ps "%FMSG%" set "FMSG=============================================================" call :log_ps "%FMSG%" set "LABELNAME=%~0" if "%ISDEBUG%"=="true" ( call :log_ps "%LABELNAME%" set "FMSG=Имя скрипта %SCRIPT_NAME%" call :log_ps "%FMSG%" set "FMSG=Раширение скрипта %SCRIPT_ETX%" call :log_ps "%FMSG%" set "FMSG=Полное имя скрипта %SCRIPT_FNAME%" call :log_ps "%FMSG%" set "FMSG=Директория скрипта %SCRIPT_DIR%" call :log_ps "%FMSG%" set "FMSG=Путь запуска %SCRIPT_PATH%" call :log_ps "%FMSG%" set "FMSG=" call :log_ps "%FMSG%" ) @REM echo. exit /b :: --- Step 0: TLS 1.2 в реестре (идемпотентно, вступает в силу после перезагрузки) --- :: Применяем заранее, чтобы после первой перезагрузки HTTPS уже работал echo [0/3] Применяю настройки TLS 1.2 в реестре... reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 2560 /f >nul 2>&1 reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 2560 /f >nul 2>&1 reg add "HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" /v SchUseStrongCrypto /t REG_DWORD /d 1 /f >nul 2>&1 reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" /v SchUseStrongCrypto /t REG_DWORD /d 1 /f >nul 2>&1 reg add "HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f >nul 2>&1 reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f >nul 2>&1 echo [0/3] - Ok Настройки TLS 1.2 применены в реестре... :: --- Step 1: Скачать win7.ps1 через HTTP (работает без SHA-2 патча) --- :: PS_URL - HTTP (fps.gper.ru), работает без патчей SHA-2 / TLS if not exist "%GPER_DIR%" mkdir "%GPER_DIR%" echo [1/3] Загрузка %PS_URL%... powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(New-Object Net.WebClient).DownloadFile('%PS_URL%', '%PS_FILE%')" if errorlevel 1 ( echo. echo [!] Ошибка загрузки %PS_URL% echo. pause exit /b 1 ) :: --- Step 2: Гарантируем UTF-8 BOM (PS2 требует BOM для кириллицы) --- REM echo [2/3] Ensuring UTF-8 BOM... REM powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$b=[System.IO.File]::ReadAllBytes('%PS_TMP%'); if(-not($b.Count -ge 3 -and $b[0] -eq 0xEF -and $b[1] -eq 0xBB -and $b[2] -eq 0xBF)){$b=[byte[]](0xEF,0xBB,0xBF)+$b}; [System.IO.File]::WriteAllBytes('%PS_FILE%',$b)" REM if errorlevel 1 ( REM echo [!] Failed to save script file. REM pause REM exit /b 1 REM ) REM del "%PS_TMP%" >nul 2>&1 :: --- Step 3: Запуск (win7.ps1 сам управляет перезагрузками через Task Scheduler) --- echo [3/3] Запуск %PS_FILE%... echo. :: Сбрасываем codepage на дефолтную - chcp 65001 ломает консольный буфер в PS3+ (0x1F Write-Host) REM chcp 437 >nul 2>&1 powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%PS_FILE%" set "EXIT_CODE=%errorlevel%" if %EXIT_CODE% neq 0 ( echo. echo [!] Скрип закончился с ошибкой: %EXIT_CODE% ) echo. pause :DOWNLOADFILE set "LABELNAME=%~0" set "FF=%1" set "FMSG=%FF%" set "ERRCODE=0" if "%ISDEBUG%"=="true" ( call :log_ps "%FMSG%" call :log_ps "%LABELNAME%" ) set "FURL=%WIN7_URL%/%FF%" set "FMSG=Загрузка %FURL%..." call :log_ps "%FMSG%" @REM if "%FF%"=="colors.cmd" ( @REM set "DST_DIR=%COMMON_CMD_DIR%" @REM ) else ( @REM if "%FF%"=="win7-866.cmd" ( @REM set "DST_DIR=%COMMON_CMD_DIR%" @REM ) else ( @REM set "FMSG=Неизвестный файл" @REM set "ERRCODE=-1" @REM ) @REM ) set "DST=%DST_DIR%\%FF%" set "FMSG=DST: %DST%" call :log_ps "%FMSG%" exit /b set "FMSG=ERRCODE: %ERRCODE%" call :log_ps "%FMSG%" exit /b if "%ERRCODE%"=="-1" ( call :log_ps "%FMSG%" "Red" pause exit ) else ( set "FMSG=Адрес загрузки %FURL%" call :log_ps "%FMSG%" set "FMSG=Место назначения %DST%" call :log_ps "%FMSG%" ) @REM echo "FURL: %FURL%" @REM echo "DST: %DST%" powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "(New-Object Net.WebClient).DownloadFile('%FURL%', '%DST%')" if errorlevel 1 set "ERRCODE=-2" if %ERRCODE%==-2 ( echo. set "FMSG=[!] Ошибка загрузки %FURL%" call :log_ps "%FMSG%" "Red" echo. pause exit ) set "FMSG=Файл успешно скачан в %DST%" call :log_ps "%FMSG%" "Green" exit /b :CALLING @REM set "LABELNAME=%~0" @REM echo LABELNAME %LABELNAME% set "LL=%1" set "PP=%2" set "FMSG=Старт %LL%" if "ISDEBUG" neq "true" set "FMSG=" @REM echo "%FMSG%" set "found=" @REM for %%a in (var1 var2 var3) do ( for %%a in (BANNER) do ( if "%LL%"=="%%a" set "found=1" ) if not defined found ( call :log_ps "%FMSG%" ) @REM pause if "x%PP%"=="x" ( if not exist "%LL%" ( call :%LL% ) else ( call "%LL%" ) ) else ( @REM set "FMSG=Старт с параметрами" @REM call :log_ps "%FMSG%" call :%LL% %PP% ) @REM echo Конец %LL% set "FMSG=Конец %LL%" if "ISDEBUG" neq "true" set "FMSG=" @REM echo "%FMSG%" if not defined found ( call :log_ps "%FMSG%" ) exit /b :MAIN @REM set "FMSG=Несколь слов в строке" @REM call :log_ps "%FMSG%" call :CALLING BANNER call :CALLING CHECKDIR call :CALLING DELOLD call :CALLING DOWNLOADFILE "colors.cmd" @REM call :CALLING %COLORS_FILE_PATH% goto :MYEOF exit /b :MYEOF set "FMSG=кАнЭц" call :log_ps "%FMSG%" "Magenta" @REM pause