<#
Nama Script : FolderTreePrinter.ps1
Deskripsi :
Script ini menampilkan struktur folder dan subfolder dari direktori yang dipilih user,
dengan opsi cetak semua subfolder, batal, atau cetak sampai level kedalaman tertentu.
Alur User :
1. User memasukkan path folder Unity Projects.
2. Script validasi apakah path ada, jika tidak minta ulang.
3. User memasukkan opsi cetak:
- Y: Cetak semua folder dan subfolder.
- N: Batal dan kembali ke input path folder.
- Angka: Cetak folder sampai level kedalaman sesuai angka.
4. Script menampilkan struktur folder sesuai input.
5. Jika batal (N), kembali ke langkah 1.
6. Jika cetak selesai, script berhenti.
#>
# 📂 Input path folder project Unity
do {
$targetFolder = Read-Host "📂 Masukkan path folder Unity Projects (contoh: D:\Project)"
if (-not (Test-Path $targetFolder)) {
Write-Host "`n❌ Path tidak ditemukan. Periksa kembali!" -ForegroundColor Red
$retry = $true
} else {
$retry = $false
}
} while ($retry)
function Print-FolderTree {
param (
[string]$Path,
[int]$Level = 0,
[int]$MaxLevel = -1
)
if ($MaxLevel -ne -1 -and $Level -ge $MaxLevel) {
return
}
$folders = Get-ChildItem -Path $Path -Directory | Sort-Object Name
foreach ($folder in $folders) {
Write-Host ("`t" * $Level) + $folder.Name
Print-FolderTree -Path $folder.FullName -Level ($Level + 1) -MaxLevel $MaxLevel
}
}
do {
$inputLevel = Read-Host "Cetak semua subfolder? (Y = semua, N = batal, atau masukkan angka level kedalaman)"
$inputLevel = $inputLevel.Trim().ToLower()
if ($inputLevel -eq 'y') {
Write-Host "`n📁 Struktur folder di: $targetFolder`n" -ForegroundColor Green
Write-Host $targetFolder
Print-FolderTree -Path $targetFolder
break
}
elseif ($inputLevel -eq 'n') {
Write-Host "❌ Proses dibatalkan. Silakan mulai ulang pemilihan folder." -ForegroundColor Yellow
# Ulang ke pemilihan folder
do {
$targetFolder = Read-Host "📂 Masukkan path folder Unity Projects (contoh: D:\Project)"
if (-not (Test-Path $targetFolder)) {
Write-Host "`n❌ Path tidak ditemukan. Periksa kembali!" -ForegroundColor Red
$retry = $true
} else {
$retry = $false
}
} while ($retry)
}
elseif ([int]::TryParse($inputLevel, [ref]$null)) {
$maxLevel = [int]$inputLevel
if ($maxLevel -le 0) {
Write-Host "⚠️ Masukkan angka lebih besar dari 0." -ForegroundColor Yellow
} else {
Write-Host "`n📁 Struktur folder di: $targetFolder (level kedalaman: $maxLevel)`n" -ForegroundColor Green
Write-Host $targetFolder
Print-FolderTree -Path $targetFolder -MaxLevel $maxLevel
break
}
}
else {
Write-Host "❌ Input tidak valid. Masukkan 'Y', 'N', atau angka." -ForegroundColor Red
}
} while ($true)