-1

我的 AutoIt 脚本中出现以下错误:

“数组变量下标格式错误。”

它被扔在这条线上: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]

有任何想法吗?

4

2 回答 2

1

我猜你要么没有任何子目录,要么你找到它们的代码不能正常工作。所以你的代码试图声明一个长度为 0 的数组。

在出现错误的行之前添加此行。

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

更新

_FileListToArray仅返回文件/文件夹名称,而不是完整路径。调用FileGetAttrib返回一个空字符串,因为它没有找到文件/文件夹。修改您If的文件名以包含父路径。

If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
于 2010-05-17T19:46:27.077 回答
1

运行您的代码,如果 $countDirs 或 $countFiles 等于 0,我只会收到错误消息。在声明数组时尝试使用这些值之前,您应该检查这一点。

另外,快速说明一下,您的 For 循环从 0 开始......在 AuotIt 中,数组的 0 索引保存数组中项目的计数。你可以这样做:

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
于 2010-05-18T12:34:14.617 回答