Michael W.: WinBatch: SubDirs/StammBaum

Hallo,

Vorab: diesen Thread kann sich jeder mal durchlesen der ahnung von schleifen hat, wenn er denn WinBatch nicht kennt.

Kennt jemand eine Funktion in WinBatch die mir ab einem bestimmten ordner alle ordner und deren unterverzeichnisse einliest?

DirItemize liest nur die ordner ein die sich in dem ordner befinden wo ich die funktion gerade ausführe:

zb.:
ordner = DirItemize("C:\Eigen Dateien\*")

"ordner" wäre somit ein array.
und in "Eigene Dateien" sind folgende ordner:

Meine Musik
Meine Bilder
Sonstiges

und genau das steht jetzt auch im Array "ordner".

gibt es keine funktion die mir jetzt noch die ordner von "Meine Musik" und "Meine Bilder" ... auflistet? in etwa so

ab \Eigene Dateien\*:

Meine Musik
Meine Musik\Pop
Meine Musik\Pop\Aktuell
Meine Musik\Pop\Alt
Meine Musik\Techno
Meine Musik\Techno\Aktuell
Meine Bilder
Meine Bilder\Privat
Sonstiges

oder es muss ja noch nicht mal eine funktion sein wie DirItemize; Nein es kann ja eine schleife sein wo DirItemize verwendet wird.
Wer kann eine solche schleife denn schreiben? Ich habe es gestern versucht, aber ich komme nicht dahinter. Die Schleife müsste dann aber so geschrieben sein das man wirklich unendlich viele unterordner einbinden kann, weil man könnte ja dann ganz einfach (wenn man wiess wieviele unterordner es gibt), soviel forschleifen verschachteln wie man ordner hat...
Dazu muss man nicht WinBatch KÖNNEN:
da die forschleifen die selben sind wie in PHP:

PHP:      for($i=0; $i <= $max; $i++)
WinBatch: for i = 1 to max

variablen sind halt wie in C++ ohne $ wie es in PHP so üblich ist.

BITTE MACHT EUCH MAL GEDANKEN ÜBER DIE SCHLEIFE auch wer nicht WinBatch kennt. Ansätze würden mir evtl. auch helfen.

es geht einfach nur darum: wie verschachtel ich meine schleifen damit meine ordner innerhalb eines ordners und deren unterordner in ein array gelesen werden.

MfG
Michael Wölk

  1. Hallo Michael,

    das Problem müßte folgendermaßen zu lösen sein (Syntax ist nicht unbedingt WinBatch-Syntax)

    zaehl=0                       // Zaehler
    array[0]="C:\Eigene Dateien"  // Erstes Element ist Ausgangsarray

    while zaehl < length(array)  //Solange Zähler <= max. Index des Arrays
      tempar=DirItemize(array[zaehl]) // es wird vorausgesetzt, daß wenn keine Unterdirs sind Array mit Länge 0 zurückgeliefert wird
      i=length(tempar)           //ermitteln Länge temp. Array
      if i > 0
        arlen=length(array)      //ermitteln Länge des Hauptarrays

    //Erweitern des Arrays mit Leerstrings entsprechend Anzahl Elemente des temp. Arrays
        for j=0 to i
          array[arlen+j]=""
        next i                  //Ende der For-Schleife

    //Verschieben der Elemente des Hauptarrays hinter dem akt. Element um
        //Anzahl der Elemente des temp. Arrays
        k=arlen + i
        for j=arlen-1 to zaehl+1
          k--
          array[k]=array[j]
        next j

    //Einfügen der Elemente des temp.Arrays mit komplettem Pfad
        k=0
        for j=zaehl+1 to zaehl+i-1
          array[j]=array[zaehl] + "" + tempar[k]
          k++
        next j

    end if                   //Ende des If-Blockes
    loop                       //Ende des While-Blockes

    Ich hoffe das hilft.

    Gruß Ralf