100 Dateien aus ordner veschieben

  • Ich möchte gerne aus einem Verzeichnis jeweils 100 Dateien die alphabetisch sortiert sind in einen neuen Ordner verschieben der automatisch durchnummeriert angelegt werden soll.

    Wie gehe ichd a am besten vor?

    Meine Idee dazu wäre:
    Ich muß zuerst feststellen wieviele Dateien sich in dem ordner befinden und durch 100 dividieren damit ich feststellen kann wieviele Ordner erstellt werden müssen.
    Diese Dann mit einer for-Schleife anlegen lassen.

    Anschließend ebenfalls mit einer FOR-Schleife 100 Dateien auswählen und verschieben.

    Wäre der Ansatz schon mal richtig?

  • Erstmal besser in H&U posten. Dann wäre es einfach wenn du dir mal die FileFind Funktionen anguckst, da kannst du mit dem Beispiel aus der Hilfe arbeiten. Ansausten gleich mit nem Array arbeiten (*vor chip versteck*).

    Spoiler anzeigen
    [autoit]

    $Dateien = 100
    $Von = "C:/"
    $Nach = "D:/"
    $Dateieindung = "*"

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

    $search = FileFindFirstFile($Von&"."&$Dateiendung)
    $c = 0
    If $search = -1 Then
    Exit
    EndIf
    While 1
    $c += 1
    $file = FileFindNextFile($search)
    If @error Or $c > 100 Then ExitLoop
    If not @extended Then
    FileCopy($Von&$file, $Nach&$file)
    EndIf
    WEnd
    FileClose($search)

    [/autoit]

    minx

    3 Mal editiert, zuletzt von minx (25. April 2012 um 13:36)

  • Ich habs jetzt soweit hinbekommen:

    [autoit]


    $quelle = "D:\DATEN\download\0-9\"
    $ziel = "D:\DATEN\download\test\"
    $suche = FileFindFirstFile($quelle & "*.*")
    $a = 0
    $c = 0
    If $suche = -1 Then
    Exit
    EndIf
    While 1
    $a += 1
    DirCreate($ziel & $a)
    If @error Or $a > 9 Then ExitLoop
    For $c = 1 To 100
    $datei = FileFindNextFile($suche)
    If not @extended Then
    FileMove($quelle & $datei, $ziel & $a & "\" & $datei)
    EndIf
    Next
    WEnd
    FileClose($suche)

    [/autoit]

    Jetzt hätte ich gern noch folgendes:

    .) Es sollen nur soviele Ordner erstellt werden wie nötigt.
    .) Die Ordner sollen mit führender Null 2-Stellig erstellt werden.

    Einmal editiert, zuletzt von DerSchatten (25. April 2012 um 15:03)

  • @extended = wahr

    Das passier wenn $datei ein Ordner ist

    @extended = falsch

    Das passiert wenn $datei eine Datei ist

    Der Rest sollte mit String Commands erreicht werden (s.ref. Hilfe!)

  • Hier ist meine Variante:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    Global $sOrdner = FileSelectFolder("", @DesktopDir) & "\" ;<-- Deinen ordner mit den Datein
    If $sOrdner = "" Then Exit

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

    Dim $Files = _FileListToArray($sOrdner, "*", 1), $Ordner[1] = [$sOrdner]
    Global $iOrdner = Round((UBound($Files) / 100))
    Global $iCounter = 0

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

    For $i = 0 To UBound($Files) - 1 Step 1

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

    If ($i = (100 * $iCounter)) Then
    $Ordner[0] = $sOrdner & $iCounter & "\"
    DirCreate($sOrdner & $iCounter & "\")
    $iCounter += 1
    EndIf

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

    FileCopy($sOrdner & $Files[$i], $Ordner[0])
    ;~ ConsoleWrite(@LF & "Source: " & $sOrdner & $Files[$i] & " ;Number: " & $i & " ; Dest: " & $Ordner[0] & @LF)
    Next

    [/autoit]
  • Habe jetzt mal versucht ob ich es selbst hinbekommen und bin soweit zufrieden damit.

    Jetzt habe ich nur ein kleines Problem das er mir trotz DirRemove den ausgewählten Ordner nicht löscht.

    Hat jemand eine Idee wo da der Fehler liegt?

    [autoit]


    Global $quelle= FileSelectFolder("", "D:\DATEN\download") & "\"
    If $quelle = "" Then Exit
    $ziel = "D:\DATEN\download\test\"
    $suche = FileFindFirstFile($quelle & "*.*")
    $a = 0
    $c = 0
    If $suche = -1 Then
    Exit
    EndIf
    While 1
    $a += 1
    DirCreate($ziel & $a)
    If @error Or $a > 19 Then ExitLoop
    For $c = 1 To 100
    $datei = FileFindNextFile($suche)
    If not @extended Then
    FileMove($quelle & $datei, $ziel & $a & "\" & $datei)
    EndIf
    Next
    WEnd
    msgbox(1, "test", $quelle)
    DirRemove($quelle, 1)
    FileClose($suche)

    [/autoit]