61 lines
2.1 KiB
PowerShell
61 lines
2.1 KiB
PowerShell
param(
|
||
[string]$IncludesFile = ".includes",
|
||
[string]$Destination = "C:\Users\matthes01\Documents\lst\lstV2",
|
||
[string]$BaseDir = "C:\Users\matthes01\Documents\lst"
|
||
)
|
||
|
||
# .\copy-includes.ps1 will run with defaults
|
||
# .\copy-includes.ps1 -IncludesFile ".\mylist.txt" -Destination "D:\build\lstV2" will override defaults
|
||
|
||
if (-Not (Test-Path $IncludesFile)) {
|
||
Write-Error "Includes file not found: $IncludesFile"
|
||
exit 1
|
||
}
|
||
|
||
# Ensure destination exists
|
||
if (!(Test-Path -Path $Destination)) {
|
||
New-Item -ItemType Directory -Path $Destination | Out-Null
|
||
Write-Host "Folder created: $Destination"
|
||
}
|
||
|
||
# Empty the destination folder
|
||
Get-ChildItem -Path $Destination -Recurse -Force | Remove-Item -Recurse -Force
|
||
|
||
# If BaseDir wasn’t explicitly passed in, use IncludesFile directory
|
||
if (-not $PSBoundParameters.ContainsKey('BaseDir')) {
|
||
$BaseDir = Split-Path -Parent (Resolve-Path $IncludesFile)
|
||
}
|
||
|
||
# Read includes list (ignore blank lines & comments)
|
||
$items = Get-Content $IncludesFile |
|
||
ForEach-Object { $_.Trim() } |
|
||
Where-Object { $_ -and -not $_.StartsWith("#") }
|
||
|
||
foreach ($item in $items) {
|
||
if ([System.IO.Path]::IsPathRooted($item)) {
|
||
# Absolute path (rare case)
|
||
$sourcePath = $item
|
||
$relative = Split-Path $item -Leaf # just take folder/file name
|
||
} else {
|
||
# Relative to BaseDir
|
||
$sourcePath = Join-Path $BaseDir $item
|
||
$relative = $item # keep full relative path e.g. "frontend\dist"
|
||
}
|
||
|
||
if (-Not (Test-Path $sourcePath)) {
|
||
Write-Warning "Skipping missing path: $sourcePath"
|
||
continue
|
||
}
|
||
|
||
# Destination path should preserve the relative structure
|
||
$targetPath = Join-Path $Destination $relative
|
||
|
||
# Ensure the parent folder exists
|
||
$targetDir = Split-Path $targetPath -Parent
|
||
if (-not (Test-Path $targetDir)) {
|
||
New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
|
||
}
|
||
|
||
Write-Host "Copying $sourcePath -> $targetPath" -ForegroundColor Cyan
|
||
Copy-Item -Path $sourcePath -Destination $targetPath -Recurse -Force
|
||
} |