Domanda

sto ottenendo il seguente errore nel mio script AutoIt:

  

"variabile Array indice mal formattato."

e si è gettato su questa linea: 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]

Tutte le idee?

È stato utile?

Soluzione

ti sto indovinando o non hanno alcun sottodirectory o il codice di trovarli non funziona correttamente. Quindi il codice sta tentando di dichiarare un array di 0 lunghezza.

Aggiungere questa riga a destra prima della riga in cui si ottiene l'errore.

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

UPDATE

_FileListToArray restituisce solo i nomi di file / cartelle, non il percorso completo. La chiamata a FileGetAttrib sta tornando una stringa vuota perché non trova il file / cartella. Modifica la tua If per includere il percorso genitore con il nome del file.

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

Altri suggerimenti

Il funzionamento del vostro codice, ho solo un errore se $ countDirs o $ countFiles è uguale a 0. Si dovrebbe essere il controllo per questo prima di tentare di utilizzare questi valori quando si dichiara gli array.

Inoltre, una breve nota, il vostro Per il ciclo sta cominciando a 0 ... in AuotIt lo 0 indice di un array detiene il numero di elementi nella matrice. Si potrebbe fare così, invece:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top