“Variabile indice di matrice mal formattato” in AutoIt
-
27-09-2019 - |
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?
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