質問
自動車スクリプトで次のエラーが発生します。
「配列変数subscriptがひどくフォーマットされています。」
そして、それはこの行に投げられます: 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]
何か案は?
解決
私はあなたがサブディレクトリを持っていないか、それらを見つけるためのあなたのコードが正しく機能していないことを推測しています。そのため、コードは0の長さの配列を宣言しようとしています。
エラーが発生する行の直前にこの行を追加します。
MsgBox(0, "Value of $countDirs", $countDirs)
アップデート
_FileListToArray
フルパスではなく、ファイル/フォルダー名のみを返します。通話 FileGetAttrib
ファイル/フォルダーが見つからないため、空の文字列を返します。あなたを変更します If
ファイル名に親のパスを含める。
If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
他のヒント
コードを実行すると、$ 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
所属していません StackOverflow