Nummerierte Ordnernamen

  • Hallo ich bin neu hier und habe an euch gleich mal eine Frage.
    Ich habe mehrere gleichnamige Ordner die aufsteigend nummeriert sind.
    Wie komm ich an den Ordnernamen heran des Ordner mit der höchsten zahl?

    Als bsp:

    Ordner-1
    Ordner-2
    Ordner-3
    Ordner-4
    Ordner-5

    So sieht das dann aus. Und ich würde gerne jetzt von all diesen Ordnern dann den namen des Ordner-5 in einer Variable haben, da er ja die höchste zahl hat.
    Ich hoffe das ist verständlich was ich meine ?(

    mfg
    sigma

    • Offizieller Beitrag

    So sollte es gehen:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $arFolder[1] = [0]
    Dim $Name2Search = 'Ordner-' ; Bestandteil des Ordnernamens der immer identisch ist
    Dim $SearchPath = 'C:\Daten\' ; Root Pfad in dem deine Ordner stecken
    Dim $search = FileFindFirstFile($SearchPath & "*.*")

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

    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If FileGetAttrib($file) = 'D' Then
    If StringInStr($file, $Name2Search, 1) Then
    ReDim $arFolder[UBound($arFolder)+1]
    $arFolder[UBound($arFolder)-1] = Number(StringTrimLeft($file, StringLen($Name2Search))) ; Der gleichnamige Bestandteil wird abgeschnitten
    $arFolder[0] += 1
    EndIf
    EndIf
    If @error Then ExitLoop
    WEnd
    FileClose($search)

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

    MsgBox(0, 'Datei mit größtem Zahlenwert', $Name2Search & _ArrayMax($arFolder,1,1))

    [/autoit]
  • hi, danke für deine hilfe aber
    leider funktioniert es irgendwie nicht richtig.
    ich habe es mal so probiert:


    [autoit]

    Dim $SearchPath = 'D:\_Eigene Files\nLite\nLite tests\XP-CDs\' ; Root Pfad in dem deine Ordner stecken

    [/autoit]


    was ich aber geschickter finde würde wenn ich mit dem makro @ScriptDir arbeite. Ich ahb das ganze mal so probiert, nur sieht er mir dann alles zwischen den ' ' als string an.

    [autoit]

    Dim $SearchPath = '@ScriptDir&"\"&"XP-CDs\' ; Root Pfad in dem deine Ordner stecken

    [/autoit]


    also so ist die ordner strunktur:

    skript
    |------------XP-CDs
    ----------------|-----------die ordner (Ordner-1,...)

  • Hallo peethebee,

    leider funktioniert das auch nicht ganz:

    Zitat

    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\New AutoIt v3 Script.au3"
    D:\New AutoIt v3 Script.au3 (4) : ==> Unterminated string.:
    Dim $SearchPath = @ScriptDir &"\XP-CDs\' ; Root Pfad in dem deine Ordner stecken

    >Exit code: 1 Time: 0.759


    da halt 1x ein " und 1x ein ' (einfach) vorhanden ist. Ich hab es schon mit 2 " " probiert und mit 2 ' ' aber es klappt leider nicht.

    er sagt dann immer:

    Zitat

    C:\Program Files\AutoIt3\Include\array.au3 (320) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    Return $avArray[_ArrayMaxIndex($avArray, $iCompNumeric, $i_Base) ]
    Return ^ ERROR
    >Exit code: 1 Time: 10.248

  • Hab auch mal was dafür gebastelt - kannst als Funktion nutzen:

    Spoiler anzeigen
    [autoit]

    $Ordner = _gethighestdir('D:\Test', 'Ordner-')

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

    If Not @error Then
    MsgBox(0,"", "Ordner mit der höchsten Zahl:" & @CRLF & @CRLF & $Ordner)
    EndIf

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

    ;Parameter 1: Überordner in welchem gesucht werden soll
    ;Parameter 2: Präfix im Ordnernamen
    Func _gethighestdir($MainPath, $Prefix)
    If Not FileExists($MainPath) Then Return SetError(1, 1, '')

    Local $dir, $number
    Local $hs[2] = [0, '']
    Local $FSObj = ObjCreate('Scripting.FileSystemObject')

    If @error Then Return SetError(2, 2, '')

    For $dir In $FSObj.GetFolder($MainPath).SubFolders
    $number = StringRegExp($dir.Name, '^' & $Prefix & '(\d+)\z', 3)
    If @error Then ContinueLoop

    If Int($number[0]) > $hs[0] Then
    $hs[0] = Int($number[0])
    $hs[1] = $dir.Name
    EndIf
    Next

    If $hs[1] = '' Then Return SetError(3, 3, '')

    Return $hs[1]
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (18. Oktober 2007 um 15:37)