Files
TG_ARPG/UE插件版本更新工具.ps1

191 lines
5.0 KiB
PowerShell
Raw Normal View History

# ========================================
# UE插件引擎版本批量更新工具
# 作者: AI Assistant
# 版本: 1.0.0
# ========================================
param(
[Parameter(HelpMessage="项目路径")]
[string]$ProjectPath = "E:\UE5\TG_ARPG",
[Parameter(HelpMessage="目标引擎版本")]
[string]$TargetVersion = "5.8.0",
[Parameter(HelpMessage="仅检查不更新")]
[switch]$CheckOnly,
[Parameter(HelpMessage="显示详细信息")]
[switch]$ShowDetails
)
function Write-Header {
param([string]$Title)
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " $Title" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
}
function Write-Success {
param([string]$Message)
Write-Host "$Message" -ForegroundColor Green
}
function Write-Warning {
param([string]$Message)
Write-Host "⚠️ $Message" -ForegroundColor Yellow
}
function Write-Error {
param([string]$Message)
Write-Host "$Message" -ForegroundColor Red
}
function Write-Info {
param([string]$Message)
Write-Host " $Message" -ForegroundColor Blue
}
function Get-PluginEngineVersion {
param([string]$PluginFile)
try {
$content = Get-Content -Path $PluginFile -Raw -ErrorAction Stop
if ($content -match '"EngineVersion":\s*"([^"]+)"') {
return $Matches[1]
}
return $null
}
catch {
return $null
}
}
function Update-PluginEngineVersion {
param(
[string]$PluginFile,
[string]$TargetVersion
)
try {
$content = Get-Content -Path $PluginFile -Raw -ErrorAction Stop
$originalContent = $content
# 替换 EngineVersion
$newContent = $content -replace '"EngineVersion":\s*"[^"]+"', "`"EngineVersion`": `"$TargetVersion`""
if ($content -ne $newContent) {
Set-Content -Path $PluginFile -Value $newContent -Encoding UTF8 -ErrorAction Stop
return $true
}
return $false
}
catch {
Write-Error "更新失败: $($_.Exception.Message)"
return $false
}
}
# ========================================
# 主程序
# ========================================
Write-Header "UE插件引擎版本批量更新工具"
# 验证项目路径
if (-not (Test-Path $ProjectPath)) {
Write-Error "项目路径不存在: $ProjectPath"
exit 1
}
$PluginsPath = Join-Path $ProjectPath "Plugins"
if (-not (Test-Path $PluginsPath)) {
Write-Error "插件目录不存在: $PluginsPath"
exit 1
}
Write-Info "项目路径: $ProjectPath"
Write-Info "插件目录: $PluginsPath"
Write-Info "目标版本: $TargetVersion"
if ($CheckOnly) {
Write-Info "模式: 仅检查"
}
Write-Host ""
# 扫描所有插件
Write-Host "正在扫描插件..." -ForegroundColor Yellow
$pluginFiles = Get-ChildItem -Path $PluginsPath -Recurse -Filter "*.uplugin" -ErrorAction SilentlyContinue
if (-not $pluginFiles) {
Write-Warning "未找到任何插件"
exit 0
}
Write-Info "找到 $($pluginFiles.Count) 个插件"
Write-Host ""
# 统计
$stats = @{
Updated = 0
AlreadyLatest = 0
NoVersion = 0
Failed = 0
Total = $pluginFiles.Count
}
# 处理每个插件
foreach ($pluginFile in $pluginFiles) {
$pluginName = $pluginFile.BaseName
$pluginPath = $pluginFile.FullName
$currentVersion = Get-PluginEngineVersion -PluginFile $pluginPath
if ($null -eq $currentVersion) {
if ($ShowDetails) {
Write-Host "[$pluginName] " -NoNewline -ForegroundColor White
Write-Host "未指定引擎版本" -ForegroundColor Gray
}
$stats.NoVersion++
continue
}
Write-Host "[$pluginName] " -NoNewline -ForegroundColor White
Write-Host "当前版本: $currentVersion" -NoNewline
if ($currentVersion -eq $TargetVersion) {
Write-Host " (已是最新)" -ForegroundColor Green
$stats.AlreadyLatest++
continue
}
Write-Host " -> 目标: $TargetVersion" -ForegroundColor Yellow
if (-not $CheckOnly) {
$success = Update-PluginEngineVersion -PluginFile $pluginPath -TargetVersion $TargetVersion
if ($success) {
Write-Success " 已更新"
$stats.Updated++
}
else {
Write-Error " 更新失败"
$stats.Failed++
}
}
else {
Write-Info " (检查模式 - 未更新)"
}
}
# 输出统计
Write-Header "更新统计"
Write-Host "总插件数: $($stats.Total)" -ForegroundColor White
Write-Host "已更新: $($stats.Updated)" -ForegroundColor Green
Write-Host "已是最新: $($stats.AlreadyLatest)" -ForegroundColor Blue
Write-Host "无版本号: $($stats.NoVersion)" -ForegroundColor Gray
Write-Host "更新失败: $($stats.Failed)" -ForegroundColor Red
if ($CheckOnly) {
Write-Host "`n提示: 使用 -CheckOnly 参数可以只检查而不更新" -ForegroundColor Yellow
}
Write-Host "`n完成!`n" -ForegroundColor Green