chcp 65001

This commit is contained in:
Alexey Barabanov
2025-11-05 17:17:16 +03:00
parent db1b0d9a5a
commit 2b5e4d76ce

View File

@@ -1,15 +1,16 @@
@echo off @echo off
chcp 65001 >nul
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
rem === Проверка аргументов === rem === Проверка аргументов ===
if "%~1"=="" ( if "%~1"=="" (
echo Укажите путь к XML-файлу. echo ERROR: Укажите путь к XML-файлу.
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" echo Пример: replace.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru"
exit /b 1 exit /b 1
) )
if "%~2"=="" ( if "%~2"=="" (
echo Укажите новый базовый URL. echo ERROR: Укажите новый базовый URL.
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" echo Пример: replace.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru"
exit /b 1 exit /b 1
) )
@@ -18,43 +19,35 @@ set "NEWURL=%~2"
rem === Проверка существования файла === rem === Проверка существования файла ===
if not exist "%FILE%" ( if not exist "%FILE%" (
echo Файл не найден: %FILE% echo ERROR: Файл не найден: %FILE%
exit /b 1 exit /b 1
) )
rem === Экранирование для PowerShell === echo Обработка файла: %FILE%
set "FILE_ESC=!FILE:'=''!" echo Новый базовый URL: %NEWURL%
set "NEWURL_ESC=!NEWURL:'=''!"
echo 🔄 Обработка файла: %FILE%
echo 🔗 Новый базовый URL: %NEWURL%
echo. echo.
rem === Создание резервной копии === rem === Создание резервной копии ===
copy "%FILE%" "%FILE%.backup" >nul 2>&1 copy "%FILE%" "%FILE%.backup" >nul 2>&1
if !errorlevel! equ 0 ( if !errorlevel! equ 0 (
echo 📂 Создана резервная копия: %FILE%.backup echo Создана резервная копия: %FILE%.backup
) else ( ) else (
echo ⚠️ Не удалось создать резервную копию echo Warning: Не удалось создать резервную копию
) )
powershell -NoLogo -NoProfile -Command ^ rem === Команда PowerShell с правильной кодировкой ===
try { ^ powershell -Command "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; ``
$file = '%FILE_ESC%'; ^ `$file = '%FILE%'; ``
$newUrl = '%NEWURL_ESC%'; ^ `$newUrl = '%NEWURL%'; ``
$content = Get-Content -Raw -Path $file -ErrorAction Stop; ^ `$content = Get-Content -Raw -Path `$file; ``
# Более точное regex для URL в XML атрибутах `$pattern = '(http[s]?://[^\s\<\"\>]+)'; ``
$pattern = '(?i)(?<==")(https?://\w{3,}\.\w+\.\w{2,}|http://\d+\.\d+\.\d+\.\d+:\d+)(/[^"<]*)?'; ^ `$content = `$content -replace `$pattern, `$newUrl; ``
$content = [regex]::Replace($content, $pattern, { ^ Set-Content -Path `$file -Value `$content -Encoding UTF8 -NoNewline; ``
param($match); ^ Write-Host 'SUCCESS: Замена завершена'"
if ($match.Groups[2].Success -and $match.Groups[2].Value) { "$newUrl$($match.Groups[2].Value)" } else { "$newUrl" } ^
}); ^ if errorlevel 1 (
Set-Content -Path $file -Value $content -Encoding UTF8 -NoNewline; ^ echo ERROR: Произошла ошибка при выполнении PowerShell
echo "✅ Замена завершена успешно."; ^ )
} catch { ^
echo "❌ Ошибка: $($_.Exception.Message)"; ^
exit 1; ^
}
echo. echo.
pause pause