Files
RFB/replace.bat
Alexey Barabanov db1b0d9a5a Экранирование спецсимволов - предотвращает инъекции
 Проверка существования файла

     Резервное копирование перед изменением

     Обработка ошибок в PowerShell

     Более точное regex - заменяет только URL в XML атрибутах

     Улучшенная обработка групп в regex

     -NoNewline в Set-Content - сохраняет оригинальное форматирование
2025-11-05 17:06:04 +03:00

60 lines
1.9 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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