Größe aller unterordner

  • folgendes:
    ich müss für unsere firma ein script schreiben, das die größe eines ordners ausliest und in eine datei schreibt (damit ich sie mit einem anderen programm in eine statistik verwandeln kann)

    soweit bin ich bis jetzt, der pfad zu dem ordner wird in einem startparameter übergeeben, die .inidatei liegt im selben verzeichnis wie das script

    [autoit]

    global $size_gb

    [/autoit][autoit][/autoit][autoit]

    $dir = DirGetSize($CmdLine[1]) ;größe ermitteln
    BinGB($dir)
    if $size_gb = "-0" then
    MsgBox(16,"Fehler","Pfad Inkorrekt")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    IniWrite(@YEAR &".ini",$CmdLine[1], @MON ,$size_gb)

    [/autoit][autoit][/autoit][autoit]

    func BinGB($size_b) ;umrechnung von byte in gigabyte und runden
    $size_gb=$size_b / 1024 / 1024 / 1024
    $size_gb= Round($size_gb, 2)
    EndFunc

    [/autoit]

    um mir und menien kollegen arbeit zu ersparen möchte ich nciht für jeden ordner einzeln den pfad angeben müssen, sondern nur den darüberliegenden ordner

    ich habe also ein verzeichnis y:/Abteilungslaufwerke/
    und in diesem ordner sind für jede Abteilung ein eigener ordner, auf den die einzelnen abteilungen als netzlaufwerk zugreifen
    ich gebe also "y:/Abteilungslaufwerke/" an, das script soll alle unterordner die sich in dem verzeichnis befinden in ein array schreiben, und dann bei einen ordner nach dem anderen die speichergröße auslesen und in die .ini-datei schreiben

    hoffe das ist verständlich

    mein problem ist jetzt ALLE unterordner nacheinander in ein array zu schreiben, wie mach ich das?

    Einmal editiert, zuletzt von Hollywood (14. Januar 2009 um 13:35)

    • Offizieller Beitrag

    Nur die Unterordner des angegebenen Verzeichnisses oder auch die Unterordner der Unterordner (also rekursiv)?

    Beispiel für den ersten Fall:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    Global $size_gb = @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    If $CmdLine[0] > 0 Then
    $dir = $CmdLine[1]
    Else
    $dir = @ScriptDir
    EndIf
    If StringRight($dir, 1) <> '\' Then $dir &= '\'
    $aFolder = _FileListToArray($dir, '*', 2)
    If @error Then Exit MsgBox(16, 'Fehler', 'Verzeichnis existiert nicht!')
    If $aFolder[0] = 0 Then Exit MsgBox(16, 'Fehler', 'Keine Unterverzeichnisse gefunden!')
    For $i = 1 To $aFolder[0]
    $size_gb &= $dir & $aFolder[$i] & '\' & @CRLF & ' Größe: ' & BinGB(DirGetSize($aFolder[$i])) & ' GB' & @CRLF & @CRLF
    Next
    ;~ MsgBox(0, 0, $size_gb)
    IniWrite(@YEAR & ".ini", $dir, @MON, $size_gb)

    [/autoit] [autoit][/autoit] [autoit]

    Func BinGB($size_b) ;umrechnung von byte in gigabyte und runden
    Return Round($size_b / 1024 / 1024 / 1024, 2)
    EndFunc ;==>BinGB

    [/autoit]

    Im letzteren Fall müsste man eine rekursive Funktion dafür verwenden.

  • Mit _FileListToArray kannst du alle UnterOrdner aus einem Ordner ermitteln, Dann musst du mit schleifen arbeiten.
    Wir hatten hier schonmal eine große Diskussion da es mit Arrays relativ lange dauert da diese ständig redimensioniert werden es gab ein paar sehr gute vorschläge im Script bereich mit objekten etc. am besten dort einfach mal nachschauen, ansonsten kannst du ja deinen code verwenden ;)

    Grml Oscar war wieder schneller^^... warst es nicht sogar du der diese UDF geschrieben hatte?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D