-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

コードを実行すると、$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 に答える
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 に答える