<#
Nama Script : FolderTreePrinterWithTabsOnly.ps1
Deskripsi :
Script ini menampilkan struktur folder DAN FILE dari direktori yang dipilih user,
dengan indentasi menggunakan TAB beneran → tanpa prefix L / icon.
Hanya tampil di console → TIDAK generate .txt.
Format:
folderutama
subfolder
subsubfolder
file.txt
file.txt
#>
# 📂 Input path folder project
do {
$targetFolder = Read-Host "📂 Masukkan path folder (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-FolderTreeWithFiles {
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) {
# BIKIN TAB BENERAN
$indent = ""
for ($i = 0; $i -lt $Level; $i++) { $indent += "`t" }
$lineFolder = "$indent$($folder.Name)"
Write-Host $lineFolder
Print-FolderTreeWithFiles -Path $folder.FullName -Level ($Level + 1) -MaxLevel $MaxLevel
}
$files = Get-ChildItem -Path $Path -File | Sort-Object Name
foreach ($file in $files) {
$indent = ""
for ($i = 0; $i -lt $Level; $i++) { $indent += "`t" }
$lineFile = "$indent$($file.Name)"
Write-Host $lineFile
}
}
do {
$inputLevel = Read-Host "Cetak semua subfolder + file? (Y = semua, N = batal, atau masukkan angka level kedalaman)"
$inputLevel = $inputLevel.Trim().ToLower()
if ($inputLevel -eq 'y') {
Write-Host "`nStruktur folder + file di: $targetFolder`n" -ForegroundColor Green
Write-Host $targetFolder
Print-FolderTreeWithFiles -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 (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 "`nStruktur folder + file di: $targetFolder (level kedalaman: $maxLevel)`n" -ForegroundColor Green
Write-Host $targetFolder
Print-FolderTreeWithFiles -Path $targetFolder -MaxLevel $maxLevel
break
}
}
else {
Write-Host "❌ Input tidak valid. Masukkan 'Y', 'N', atau angka." -ForegroundColor Red
}
} while ($true)