„Array Variable Index schlecht formatiert“ in AutoIt
-
27-09-2019 - |
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?
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