Frage

Ich erhalte die folgenden Fehler in meinem AutoIt-Skript:

  

„Die Feldvariable Index schlecht formatiert.“

, und es wird auf dieser Linie geworfen: Local $allDirs[$countDirs]

Func archiveDir($dir)

    ; Get all the files under the current dir
    $allOfDir = _FileListToArray($dir)
    Local $countDirs = 0
    Local $countFiles = 0

    $imax = UBound($allOfDir)
    For $i = 0 to $imax - 1
        If StringInStr(FileGetAttrib($allOfDir[$i]),"D") Then
            $countDirs = $countDirs + 1
        Else
            $countFiles = $countFiles + 1
        EndIf   
    Next

    Local $allDirs[$countDirs]
    Local $allFiles[$countFiles]

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich vermute, Sie haben entweder keine keine Unterverzeichnisse oder Ihren Code zu finden arbeiten sie ist nicht richtig. So Ihr Code versucht, ein Array von 0 Länge zu erklären.

Fügen Sie diese Zeile direkt vor der Zeile, wo Sie den Fehler.

MsgBox(0, "Value of $countDirs", $countDirs)

UPDATE

_FileListToArray gibt nur die Datei / Ordner-Namen, nicht den vollständigen Pfad. Der Aufruf von FileGetAttrib kehrt eine leere Zeichenfolge, weil es nicht die Datei / Ordner nicht finden. Ändern Sie bitte Ihre If den übergeordneten Pfad mit dem Dateinamen aufzunehmen.

If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then

Andere Tipps

Ihr Code Rennen, ich nur eine Fehlermeldung erhalten, wenn $ countDirs oder $ countFiles gleich 0 ist, sollten Sie für diese werden überprüft, bevor Sie versuchen, diese Werte zu verwenden, wenn die Arrays zu deklarieren.

Auch eine kurze Notiz, Ihre For-Schleife wird beginnend bei 0 ... in AuotIt der 0 Index eines Arrays hält die Anzahl der Elemente im Array. Man könnte es tun, wie diese statt:

For $i = 1 to $allOfDir[0]
    If StringInStr(FileGetAttrib($allOfDir[$i]), "D") Then
        $countDirs+=1
    Else
       $countFiles+=1
    EndIf
Next

If ($coundDirs > 0) Then
   Local $allDirs[$countDirs]
   ; do whatever else you need to do here.
EndIf

If ($countFiles > 0) Then
   Local $allFiles[$countFiles]
   ; do whatever else you need to do here.
EndIf
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top