Dateien zählen und vergleichen

  • Hallo zusammen
    Bin neu und noch ein frischling in Sachen AutoIT.
    Ich möchte mit meinem Script einen bestimmten Ordner auslesen und mit einem Solwert vergleichen (Anzahl der erwarteten Dateien in diesem Ordern).

    Hab mich im Forum etwas schlau gemacht und folgendes Script gefunden.

    [autoit]


    #include <File.au3>
    ;~ #include <Array.au3>
    DIM $zahl = 6
    DIM $dir = 0
    $folder = FileSelectFolder("Ordner auswählen", "");man könnte das auch dirket im script eingeben..
    $dir = _FileListToArray($folder, '*.*');im zweiten parameter könntest du dann den filetyp z.b. '*.txt' definieren...
    ;~ _ArrayDisplay($dir,"test")

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

    if $zahl = $dir Then
    msgbox(0,"Ja", $zahl & " / " & $dir)
    Else
    MsgBox(0,"Nein", $zahl & " / " & $dir)
    EndIf

    [/autoit]

    Hoffe, dass dies so richtig ist

    Als Ausgabe erhalten ich NEIN, 6 / (und nichts mehr)
    Was mache ich falsch?
    Danke für eure Hilfe.

    Felsi

    3 Mal editiert, zuletzt von felsenhau (2. Mai 2013 um 17:20)

  • Ich muss ehrlich gestehen ich kann keine wirkliche Frage aus deinem Text erkennen...Du erhälst das Nein weil scheinbar dann nicht genau 6 Ordner/Dateien im ausgewähltem Ordner vorhanden sind. Mehr passiert nicht da ja auch im Code nicht mehr steht.

    Ich würde dich noch bitten demnächst Code in entsprechenden [.autoit] und [.spoiler] Brackets zu packen.

    Möchtest du vielleicht sowas?

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    ;~ #include <Array.au3> ;debug only

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

    Local $iSollwert = 6
    Local $aIstwert = 0
    Local $sPfadOrdner = FileSelectFolder("Ordner auswählen", "")
    $aIstwert = _FileListToArray($sPfadOrdner, '*.*', 1) ;$iFlag=0(Default) Return both files and folders
    ;$iFlag=1 Return files only
    ;$iFlag=2 Return Folders only
    ;~ _ArrayDisplay($aIstwert, "Testausgabe") ;debug only

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

    If $aIstwert[0] = $iSollwert Then
    MsgBox(0, "Ja", "$iSollwert: " & $iSollwert & @CR & "$aIstwert[0]: " & $aIstwert[0])
    Else
    MsgBox(0, "Nein", "$iSollwert: " & $iSollwert & @CR & "$aIstwert[0]: " & $aIstwert[0])
    EndIf

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

  • Entschuldige
    Anfänger Fehler

    Der Code Funktioniert - super besten Dank

    Felsi

    Einmal editiert, zuletzt von felsenhau (2. Mai 2013 um 16:04)

  • Ist ja kein problem ;)

    Wärst du so lieb und setzt das Thema auf gelöst?
    (Ersten Beitrag von dir bearbeiten, dann Status: gelöst.)

    Grüße Yaerox

    Grüne Hölle

  • vielleicht hilft dir das hier weiter...

    Spoiler anzeigen
    [autoit]

    Func _Datenabgleich($s_source_one, $s_source_two, $f_name = True, $f_date = False, $f_size = False)
    If (Not IsString($s_source_one)) Or (Not IsString($s_source_two)) Or Not IsBool($f_name) Or Not IsBool($f_date) Or Not IsBool($f_size) Then
    Return SetError(-1)
    ElseIf Not StringRegExp(StringLeft($s_source_one, 1), "[a-zA-Z]") Or StringMid($s_source_one, 2, 1) <> ":" Then
    Return SetError(-2)
    ElseIf Not StringRegExp(StringLeft($s_source_two, 1), "[a-zA-Z]") Or StringMid($s_source_two, 2, 1) <> ":" Then
    Return SetError(-3)
    EndIf
    Local $a_source_one[1] = [0], $a_source_two[1] = [0], $f_notfound = True, $a_notfound[1] = [0]

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

    _FileFindAll($s_source_one, $a_source_one)
    _FileFindAll($s_source_two, $a_source_two)

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

    For $i = 1 To $a_source_one[0]
    $f_notfound = True
    For $x = $a_source_two[0] To 1 Step - 1
    If $f_name Then
    If _GetDataName($a_source_one[$i]) = _GetDataName($a_source_two[$x]) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_date Then
    If FileGetTime($a_source_one[$i], 0, 1) = FileGetTime($a_source_two[$x], 0, 1) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_size Then
    If FileGetSize($a_source_one[$i]) = FileGetSize($a_source_two[$x]) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_name And $f_date Then
    If _GetDataName($a_source_one[$i]) = _GetDataName($a_source_two[$x]) And FileGetTime($a_source_one[$i], 0, 1) = FileGetTime($a_source_two[$x], 0, 1) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_name And $f_size Then
    If _GetDataName($a_source_one[$i]) = _GetDataName($a_source_two[$x]) And FileGetSize($a_source_one[$i]) = FileGetSize($a_source_two[$x]) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_date And $f_size Then
    If FileGetTime($a_source_one[$i], 0, 1) = FileGetTime($a_source_two[$x], 0, 1) And FileGetSize($a_source_one[$i]) = FileGetSize($a_source_two[$x]) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    ElseIf $f_name And $f_date And $f_size Then
    If _GetDataName($a_source_one[$i]) = _GetDataName($a_source_two[$x]) And FileGetSize($a_source_one[$i]) = FileGetSize($a_source_two[$x]) And FileGetTime($a_source_one[$i], 0, 1) = FileGetTime($a_source_two[$x], 0, 1) Then
    $f_notfound = False
    ExitLoop 1
    EndIf
    EndIf
    Next
    If $f_notfound Then
    $i_ubound = UBound($a_notfound, 1)
    ReDim $a_notfound[$i_ubound + 1]
    $a_notfound[$i_ubound] = $a_source_one[$i]
    $a_notfound[0] += 1
    EndIf
    Next
    Return $a_notfound
    EndFunc

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

    Func _GetDataName($s_data)
    Local $a_data = StringSplit($s_data, "\")
    Return $a_data[$a_data[0]]
    EndFunc

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

    Func _FileFindAll($s_path, ByRef $a_found, $s_filetype = False, $s_filename = False)
    If $s_path = "" Or Not IsArray($a_found) Then Return SetError(-1)
    If StringRegExp(StringLeft($s_path, 1), "[a-zA-Z]") And StringMid($s_path, 2, 1) = ":" Then
    If StringRight($s_path, 1) <> "\" Then $s_path &= "\"
    Local $s_suchen, $s_weitersuchen, $i_ubound
    If $s_filetype And StringLeft($s_filetype, 1) <> "*" Then $s_filetype = "*" & $s_filetype
    $s_suchen = FileFindFirstFile($s_path & "*")
    If $s_suchen = -1 Then Return SetError(-2)
    While 1
    $s_weitersuchen = FileFindNextFile($s_suchen)
    If @error Then ExitLoop
    If @extended Then _FileFindAll($s_path & $s_weitersuchen & "\", $a_found, $s_filetype, $s_filename)
    If $s_filetype And Not $s_filename Then
    If StringRight($s_weitersuchen, StringLen($s_filetype) - 1) = StringTrimLeft($s_filetype, 1) Then
    $i_ubound = UBound($a_found, 1)
    ReDim $a_found[$i_ubound + 1]
    $a_found[$i_ubound] = $s_path & $s_weitersuchen
    EndIf
    ElseIf $s_filename And Not $s_filetype Then
    If StringLeft($s_weitersuchen, StringLen($s_filename)) = $s_filename Then
    $i_ubound = UBound($a_found, 1)
    ReDim $a_found[$i_ubound + 1]
    $a_found[$i_ubound] = $s_path & $s_weitersuchen
    EndIf
    ElseIf $s_filename And $s_filetype Then
    If (StringRight($s_weitersuchen, StringLen($s_filetype) - 1) = StringTrimLeft($s_filetype, 1)) And (StringLeft($s_weitersuchen, StringLen($s_filename)) = $s_filename) Then
    $i_ubound = UBound($a_found, 1)
    ReDim $a_found[$i_ubound + 1]
    $a_found[$i_ubound] = $s_path & $s_weitersuchen
    EndIf
    Else
    $i_ubound = UBound($a_found, 1)
    ReDim $a_found[$i_ubound + 1]
    $a_found[$i_ubound] = $s_path & $s_weitersuchen
    EndIf
    WEnd
    $a_found[0] = UBound($a_found) - 1
    Return $a_found
    Else
    Return SetError(-1)
    EndIf
    EndFunc

    [/autoit]