# Update subfolders with the latest UpdateSequences and UpdateAllSequences scripts Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' if (-not $PSScriptRoot) { $PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path } $configLoader = Join-Path -Path $PSScriptRoot -ChildPath 'ConfigLoader.ps1' if (-not (Test-Path -LiteralPath $configLoader)) { throw "Missing ConfigLoader.ps1 in $PSScriptRoot" } . $configLoader $structDir = Get-StructDirectory $projectsRoot = Get-ProjectsRoot $sourceBat = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' $sourceAllBat = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' $sourceZipBat = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' $sourceUnzipBat = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' $configLoaderSource = Join-Path -Path $structDir -ChildPath 'ConfigLoader.ps1' $configJsonSource = Join-Path -Path $structDir -ChildPath 'config.json' if (-not (Test-Path -LiteralPath $sourceBat)) { Write-Error "Source file not found: $sourceBat"; exit 1 } if (-not (Test-Path -LiteralPath $sourceAllBat)) { Write-Error "Source file not found: $sourceAllBat"; exit 1 } if (-not (Test-Path -LiteralPath $sourceZipBat)) { Write-Error "Source file not found: $sourceZipBat"; exit 1 } if (-not (Test-Path -LiteralPath $sourceUnzipBat)) { Write-Error "Source file not found: $sourceUnzipBat"; exit 1 } if (-not (Test-Path -LiteralPath $configLoaderSource)) { Write-Error "Config loader not found: $configLoaderSource"; exit 1 } if (-not (Test-Path -LiteralPath $configJsonSource)) { Write-Error "Config file not found: $configJsonSource"; exit 1 } $specs = @( @{ Name = "UpdateSequences.bat"; Source = $sourceBat }, @{ Name = "UpdateAllSequences.bat"; Source = $sourceAllBat }, @{ Name = "ZipSeqArchv.bat"; Source = $sourceZipBat }, @{ Name = "UnzipSeqArchv.bat"; Source = $sourceUnzipBat } ) $sharedAssets = @( @{ Name = 'ConfigLoader.ps1'; Source = $configLoaderSource }, @{ Name = 'config.json'; Source = $configJsonSource } ) $grandTotal = 0 $grandUpdated = 0 $grandFailed = 0 $touchedDirs = @{} foreach ($spec in $specs) { Write-Host "=== Updating $($spec.Name) files ===" -ForegroundColor Cyan Write-Host "Source: $($spec.Source)" -ForegroundColor White Write-Host "" $targets = Get-ChildItem -LiteralPath $projectsRoot -Recurse -Filter $spec.Name -File -ErrorAction SilentlyContinue | Where-Object { $_.FullName -ne $spec.Source } Write-Host "Found $($targets.Count) target files to update:" -ForegroundColor Yellow foreach ($t in $targets) { Write-Host " - $($t.FullName)" -ForegroundColor Gray } Write-Host "" $updated = 0 $failed = 0 foreach ($t in $targets) { $targetDir = $t.Directory.FullName try { Copy-Item -Path $spec.Source -Destination $t.FullName -Force Write-Host "āœ“ Updated: $($t.FullName)" -ForegroundColor Green $updated++ if (-not $touchedDirs.ContainsKey($targetDir)) { foreach ($asset in $sharedAssets) { try { Copy-Item -Path $asset.Source -Destination (Join-Path -Path $targetDir -ChildPath $asset.Name) -Force } catch { Write-Host "āœ— Failed to copy $($asset.Name) to $targetDir" -ForegroundColor Red Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Red } } $touchedDirs[$targetDir] = $true } } catch { Write-Host "āœ— Failed to update: $($t.FullName)" -ForegroundColor Red Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Red $failed++ } } Write-Host "" Write-Host "=== $($spec.Name) SUMMARY ===" -ForegroundColor Magenta Write-Host "Successfully updated: $updated" -ForegroundColor Green Write-Host "Failed updates: $failed" -ForegroundColor Red Write-Host "Total targets: $($targets.Count)" -ForegroundColor White Write-Host "" $grandTotal += $targets.Count $grandUpdated += $updated $grandFailed += $failed } Write-Host "=== OVERALL SUMMARY ===" -ForegroundColor Magenta Write-Host "Total targets across all files: $grandTotal" -ForegroundColor White Write-Host "Total successfully updated: $grandUpdated" -ForegroundColor Green Write-Host "Total failed: $grandFailed" -ForegroundColor Red if ($grandFailed -eq 0) { Write-Host "`nšŸŽ‰ All files updated successfully!" -ForegroundColor Green } else { Write-Host "`nāš ļø Some updates failed. See errors above." -ForegroundColor Yellow }