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