开发者

"Array variable subscript badly formatted" in AutoIt

开发者 https://www.devze.com 2022-12-31 03:42 出处:网络
I\'m getting the following error in my AutoIt script: \"Array variable subscript badly formatted.\" and it is thrown on this line: Local $allDirs[$countDirs]

I'm getting the following error in my AutoIt script:

"Array variable subscript badly formatted."

and it is thrown on this line: 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($al开发者_如何学运维lOfDir[$i]),"D") Then
            $countDirs = $countDirs + 1
        Else
            $countFiles = $countFiles + 1
        EndIf   
    Next

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

Any ideas?


I'm guessing you either don't have any subdirectories or your code to find them isn't working correctly. So your code is trying to declare an array of 0 length.

Add this line right before the line where you get the error.

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

UPDATE

_FileListToArray only returns the file/folder names, not the full path. The call to FileGetAttrib is returning an empty string because it does not find the file/folder. Modify your If to include the parent path with the file name.

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


Running your code, I only get an error if $countDirs or $countFiles is equal to 0. You should be checking for this before trying to use these values when declaring your arrays.

Also, a quick note, your For Loop is starting at 0... in AuotIt the 0 index of an array holds the count of items in the array. You could do it like this instead:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消