0

WinActorv7.2.0ユーザです。

目的は1次元配列を使って、指定フォルダ内の指定拡張子のファイルリストを作成することです。

「1次元配列操作(初期化)」ライブラリの次に配置するライブラリとして、下記のコードで独自ライブラリを作成しました。

プロパティの画像を添付します。

最後の行(下記)の変数iにファイル数が取得できるはずなのですが、シナリオを実行するとなぜか0が現在値として設定されます。(正解は4)

SetUMSVariable $ファイル数$, i

VBScriptに詳しい方、原因を教えてください!

--<コードはここから>-----

'インプット変数
arrayName = !配列名!

' ファイルシステムオブジェクトの準備
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(!対象のフォルダ!)

' ファイル名フィルタの準備
Set objRE = CreateObject("VBScript.RegExp")
strFilter = !ファイル名フィルタ!
strFilter = Replace(strFilter, "\", "\\")
strFilter = Replace(strFilter, "+", "\+")
strFilter = Replace(strFilter, ".", "\.")
strFilter = Replace(strFilter, "|", "\|")
strFilter = Replace(strFilter, "{", "\{")
strFilter = Replace(strFilter, "}", "\}")
strFilter = Replace(strFilter, "[", "\[")
strFilter = Replace(strFilter, "]", "\]")
strFilter = Replace(strFilter, "(", "\(")
strFilter = Replace(strFilter, ")", "\)")
strFilter = Replace(strFilter, "$", "\$")
strFilter = Replace(strFilter, "^", "\^")
strFilter = Replace(strFilter, "?", ".")
strFilter = Replace(strFilter, "*", ".*")

objRE.pattern = "^" & strFilter & "$"
objRE.ignoreCase = True

'配列の存在確認
If rootArray.Exists(arrayName) = false Then
'配列数変更
ReDim objArray(CInt(index))
rootArray.Add arrayName,objArray
Erase objArray
i = 0
Else

i= UBound(rootArray.Item(arrayName)) + 1
End If

' フォルダ内のファイルを順々にチェックする
For Each file In objFolder.Files

If file.attributes And 2 Then
' 隠しファイルは処理をしない
Else

' ファイル名がフィルタに一致するかチェックする
If objRE.Test(file.Name) Then

index = i
value = file.Path

'配列取得
getArray = rootArray.Item(arrayName)

'配列の要素確認
If UBound(getArray) < CInt(index) Then
'配列情報を温存し、配列数変更
ReDim Preserve getArray(CInt(index))
End If

'辞書に情報追加
getArray(index) = value

rootArray.Remove arrayName
rootArray.Add arrayName,getArray

Erase getArray

' ファイルのインデックス番号をカウントアップ
i = i + 1
End If
End If
Next

' 配列に入れる値が存在しなかった場合は、配列を削除する
If i = 0 Then
rootArray.Remove arrayName
End If

SetUMSVariable $ファイル数$, i

--<コードはここまで>-----

gorby5775 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。