# FSO Alle Dateien aus Ordner und Unterordnern auslesen



## gianfranco0104 (15. August 2014)

Hab da ein Problem. Bislang habe ich Dateien aus einem Ordner erfolgreich auslesen können und aufgelistet. Jetzt kommen auch Unterordner dazu. Die Aufgabe ist, alle Dateien aus den Ordnern auszulesen und aufzulisten. Aus welchem Ordner sie kommen muss nicht mit aufgelistet werden, lediglich der gesamte Dateiinhalt aller Ordner/Unterordner.
Ich weiß wie man Subfolder ausließt, und habe es mal so probiert: 1. äußere For-Schleife Ordner auslesen, 2. innere For-Schleife alle Dateien auslesen.
Aber es klappt nicht. Hier mal der Code, vielleicht stimmen die Reihenfolgen nicht?!


```
var projName = []; //('Projektname')
var folderName = null //alle subfolders
var ProjDateRoh = null // ('Tue Aug 5 02:53:27 EDT 2014')
var ProjDate = null // ('05.08.2014')
var arrayFileData = [];
var files = null

//Alle Files und deren Namen Einlesen
var fileAmount = new ActiveXObject("Scripting.FileSystemObject");
shell = new ActiveXObject("WScript.Shell");
pathToMyDocuments = shell.SpecialFolders('MyDocuments');
var folderObj = fileAmount.GetFolder(pathToMyDocuments +  "\\CM5Projects\\");

// erstellen eines Enumerator Typen und Kollektion aller Dateien im Ordner
var Collection = new Enumerator(folderObj.SubFolders);  //Ordner und Sub-Ordner
var Obj;  //Ordner- und Sub-Ordner-Objekte
var filesCollection = new Enumerator(folderObj.Files); //Dateien
var fileObj; //Datei-Objekte
//+ Collection.moveFirst()+ !Collection.atEnd()+ Collection.moveNext()

for (Collection.moveFirst() ; !Collection.atEnd() ; Collection.moveNext()) {
 
    for (filesCollection.moveFirst() ; !filesCollection.atEnd() ; filesCollection.moveNext()) {
        Obj = Collection.item();
        fileObj = filesCollection.item();
        projName = fileObj.Name;
        ProjDateRoh = fileObj.Name;
        folderName = Obj.Name;
     
        // Datum vom letzten Zugriff der Dateien
        var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject");
        shell = new ActiveXObject("WScript.Shell");
        pathToMyDocuments = shell.SpecialFolders('MyDocuments');
        allPathToMyDocuments = folderObj + "\\" + folderName + "\\" + ProjDateRoh;
     
        var ProjDateRaw = getProjDateRoh.GetFile(allPathToMyDocuments);
        ProjDateRoh = ProjDateRaw.DateLastAccessed;// Date Format ist ('Tue Aug 5 02:53:27 EDT 2014')
     
        // In ein Array einbauen
        var fileYear = new Date(ProjDateRoh).getFullYear()
        var fileMonth = ('0' + new Date(ProjDateRoh).getMonth()).substr(-2)
        var fileDay = ('0' + new Date(ProjDateRoh).getDate()).substr(-2)
        var arrayElement = fileYear + fileMonth + fileDay + "_____" + projName
     
        arrayFileData.push(arrayElement)
        //vom Speicher zurücksetzen
        getProjDateRoh = null
        fileAmount = null
    }
}
```

bei einem Alert(allPathToMyDocuments); bekomme ich 1x den korrekten Pfad EINES ordners, aber mit dem Dateinamen des übergeordneten Root-Ordners). und das wars dann, alle anderen und die in den Subfoldern werden ignoriert.


----------



## gianfranco0104 (15. August 2014)

*UPDATE:*
Bin gerade an einer Lösung sehr nahe - erstmal nicht weiter verfolgen. Lösung folgt.

*UPDATE 2:*
Die Lösung:


```
var projName = []; //('Projektname')
var folderName = []; //alle subfolders
var ProjDateRoh = null // ('Tue Aug 5 02:53:27 EDT 2014')
var ProjDate = null // ('05.08.2014')
var arrayFileData = [];
var filesAll = null
var fileAmount = new ActiveXObject("Scripting.FileSystemObject");

function ShowFolderFileList(folderspec) {
    var s = "";
    var f = fileAmount.GetFolder(folderspec);
    var subfolders = new Enumerator(f.SubFolders);
    for (subfolders.moveFirst(); !subfolders.atEnd(); subfolders.moveNext()) {
        s += ShowFolderFileList(subfolders.item().path);
    }
    // Alle Files auflisten.
    var fc = new Enumerator(f.files);
   
    for (i = 0; !fc.atEnd(); fc.moveNext()) {
            fc.item().name != "";
            projName = fc.item().name;
            
           
            // Datum vom letzten Zugriff der Dateien
            var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject"); 
            shell = new ActiveXObject("WScript.Shell");
            pathToMyDocuments = shell.SpecialFolders('MyDocuments');
            var ProjDateRaw = getProjDateRoh.GetFile(fc.item().path);
            ProjDateRoh = ProjDateRaw.DateLastAccessed; // Date Format ist ('Tue Aug 5 02:53:27 EDT 2014')
               
            // In ein Array einbauen
            var fileYear = new Date(ProjDateRoh).getFullYear()
            var fileMonth = ('0' + new Date(ProjDateRoh).getMonth()).substr(-2)
            var fileDay = ('0' + new Date(ProjDateRoh).getDate()).substr(-2)
            var arrayElement = fileYear + fileMonth + fileDay + "_____" + projName
            arrayFileData.push(arrayElement);

//jetzt kann man damit treiben was man will. ich sortiere es und baue es wieder um in ein sauberes Datum, Dateiname (ohne Suffix) und liste sie dann...
    }
}

var  shell = new ActiveXObject("WScript.Shell");
var pathToMyDocuments = shell.SpecialFolders('MyDocuments');
var folderspec = fileAmount.GetFolder(pathToMyDocuments +  "\\CM5Projects\\");
ShowFolderFileList(folderspec);
```


----------

