# Wirft aktuell Fehler, wenn man zurück in das Laufwerkverzeichnis geht!

Function Main
{
$LaufwerkAuswahlAktiv = $true
$DateiAuswahlAktiv = $true

while ($LaufwerkAuswahlAktiv)
{
    $Laufwerke = LaufwerkeFinden
    Write-Host "Gefundene Laufwerke: " $Laufwerke

    $Pfad = Laufwerkwaehlen $Laufwerke
    Write-Host "Gewähltes Laufwerk: " $Pfad

    $LaufwerkAuswahlAktiv = $false
    $DateiAuswahlAktiv= $true

    while ($DateiAuswahlAktiv)
    {
        $UnterOrdner = UnterOrdnerFinden $Pfad
        Write-Host "Mögliche Unterordner: " $UnterOrdner

        $TxtDateien = TxtDateienFinden $Pfad
        Write-Host "Mögliche txt Dateien: " $TxtDateien

        #-> Fall einbauen, wenn es weder Unterordner noch TxtDateien gibt?
        $AuswahlOptionen = Optionen $UnterOrdner $TxtDateien
        Write-Host "Auswahloptionen: " $AuswahlOptionen

        $Auswahl = OrdnerWaehlen $Pfad $AuswahlOptionen
        Write-Host "Gewählte Option: " $Auswahl

        if ($Auswahl -ne "Zurueck")
        {
            $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
        }
        else
        {
            Write-Host "Eine Ordnerebene zurück"
            $Pfad = Split-Path $Pfad
            Write-Host "Neuer Pfad: " $Pfad

            if ($($Pfad.Length -le 3))
            {
                Write-Host "Der Pfad ist kürzer als 3 Zeichen -> Laufwerk wählen"
                $DateiAusahlAktiv = $false
            }
        }

        Write-Host "Aktueller Pfad : " $Pfad
        
        if ($($Auswahl -match ".txt")) #Besser: Letzte 4 Zeichen von auswahl nehmen und dann -eq
        {
            Write-Host "Es handelt sich um eine .txt-Datei"
            $DateiauswahlAktiv = $false
        }
        Write-Host "--------------------------------------------------------------------------------------"
        # Zwei ifs
        #1 .txt-Datei gewählt -> $DateiAuswahlAktiv = $false
        #2 Pfad ist aufgrund von "Zurück" leer (kein Laufwerk mehr) -> $LaufwerkauswahlAktiv = $true
    }

    Write-Host "Gewählte Datei: " $Pfad
}

}

Function LaufwerkeFinden()
{
$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name
$i = 0

foreach($Laufwerk in $Laufwerke)
{
    $Laufwerke[$i] =  $Laufwerk + ":\"
    $i++
}

return $Laufwerke
}

Function Laufwerkwaehlen($Laufwerke)
{
$Eingabe = $Laufwerke | Out-GridView -PassThru -Title "Laufwerke"

return $Eingabe
}

Function UnterOrdnerFinden($Pfad)
{
#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung
return $(Get-Childitem $Pfad -Directory)
}

Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)

if ($TxtDateien.Length -gt 0)
{
    return $(Split-Path $TxtDateien -Leaf)
}
else
{
    return
}
}

Function Optionen($UnterOrdner, $TxtDateien)
{
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$OrdnerFormat = @()
$TxtDateienFormat = @()
foreach ($Ordner in $UnterOrdner)
{
    $OrdnerFormat += [System.String]$Ordner
}
foreach ($TxtDatei in $TxtDateien)
{
    $TxtDateienFormat += [System.String]$TxtDatei
}

$Optionen = $OrdnerFormat + $TxtDateienFormat + "Zurueck"

return $Optionen
}

Function OrdnerWaehlen($Pfad, $AuswahlOptionen)
{
if ($Pfad -eq "")
{
    $Pfad = "Laufwerke"
}

$Eingabe = $AuswahlOptionen | Out-GridView -PassThru -Title $Pfad

Write-Host "Gewählte Option in Funktion: " $Input

return $Eingabe
}

Main