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

191 lines
5.0 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ========================================
# 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