# ======================================== # 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