✅ Проверка существования файла ✅ Резервное копирование перед изменением ✅ Обработка ошибок в PowerShell ✅ Более точное regex - заменяет только URL в XML атрибутах ✅ Улучшенная обработка групп в regex ✅ -NoNewline в Set-Content - сохраняет оригинальное форматирование
60 lines
1.9 KiB
Batchfile
60 lines
1.9 KiB
Batchfile
@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 |