Question

Je reçois l'erreur suivante dans mon script AutoIt:

  

"variable Array mal formaté indice."

et il est jeté sur cette ligne: 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]

Toutes les idées?

Était-ce utile?

La solution

Je devine que vous ne soit pas de sous-répertoires ou votre code pour les trouver ne fonctionne pas correctement. Donc, votre code tente de déclarer un tableau de 0 longueur.

Ajoutez cette droite ligne avant la ligne où vous obtenez l'erreur.

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

UPDATE

_FileListToArray renvoie uniquement les noms de fichier / dossier, pas le chemin complet. L'appel à FileGetAttrib retourne une chaîne vide, car il ne trouve pas le fichier / dossier. Modifier votre If pour inclure le chemin parent avec le nom du fichier.

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

Autres conseils

L'exécution du code, je reçois seulement une erreur si $ countDirs ou countFiles $ est égal à 0. Vous devriez vérifier pour avant d'essayer d'utiliser ces valeurs lors de la déclaration de vos tableaux.

En outre, une note rapide, votre boucle For commence à 0 ... en AuotIt l'indice 0 d'un tableau contient le nombre d'éléments dans le tableau. Vous pouvez le faire comme ceci:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top