This commit is contained in:
2025-11-05 18:18:58 +03:00

View File

@@ -1,36 +1,42 @@
@echo off @echo off
setlocal chcp 65001 >nul
setlocal enabledelayedexpansion
rem === Проверка аргументов ===
if "%~1"=="" ( if "%~1"=="" (
echo ❌ Укажите путь к XML-файлу. echo ERROR: Specify file path
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" echo Example: 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: Specify new URL
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" echo Example: replace.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru"
exit /b 1 exit /b 1
) )
set "FILE=%~1" set "FILE=%~1"
set "NEWURL=%~2" set "NEWURL=%~2"
echo 🔄 Обработка файла: %FILE% if not exist "!FILE!" (
echo 🔗 Новый базовый URL: %NEWURL% echo ERROR: File not found: !FILE!
exit /b 1
)
echo Processing: !FILE!
echo New URL: !NEWURL!
echo. echo.
powershell -NoLogo -NoProfile -Command ^ copy "!FILE!" "!FILE!.backup" >nul 2>&1
$file = '%FILE%'; ^ if !errorlevel! equ 0 (
$newUrl = '%NEWURL%'; ^ echo Backup created: !FILE!.backup
$content = Get-Content -Raw $file; ^ ) else (
# шаблон: ищем http(s)://домен или IP:порт и сохраняем хвост, если есть echo WARNING: Backup failed
$pattern = '(?s)(https?:\/\/\w{3,}\.\w+\.\w{2,}|http:\/\/\d+\.\d+\.\d+\.\d+:\d+)(\/[^\s<"]*)?'; ^ )
# замена: если есть хвост — добавляем его обратно, иначе только базовый URL
$content = [regex]::Replace($content, $pattern, {
if ($matches[2]) { "$newUrl$($matches[2])" } else { "$newUrl" }
}); ^
Set-Content -Path $file -Value $content -Encoding UTF8
echo ✅ Замена завершена. powershell -Command "$content = [System.IO.File]::ReadAllText('%FILE%'); $pattern = '<url>http[s]?://[^/<\"]+(/[^<\"]*)?</url>'; $content = $content -replace $pattern, '<url>%NEWURL%$1</url>'; [System.IO.File]::WriteAllText('%FILE%', $content, [System.Text.Encoding]::UTF8); Write-Host 'SUCCESS: Replacement completed'"
pause
if errorlevel 1 (
echo ERROR: PowerShell command failed
)
echo.
pause