您的代码不起作用的原因是因为您正在创建没有实际大小的固定大小数组 (Dim myArray()),然后尝试为该数组分配值。在 VBScript 中,您必须将值分配给数组位置 (myArray(pos) = val),并且您不能追加到内置数组(至少在没有一些额外工作的情况下是这样)。
在您的情况下,最直接的方法是建议的方法@Bond。但是,如果您愿意,可以对数组执行此操作。你只需要一个这样的可调整大小的数组:
ReDim myArray(-1) 'empty array
For i = 0 to colDrives.Count-1 Step 2
ReDim Preserve myArray(UBound(myArray)+1)
myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next
MsgBox Join(myArray, vbNewLine)
或者(使用ArrayList),像这样:
Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next
MsgBox Join(myArray.ToArray, vbNewLine)
由于在进入循环之前已经确定了数组的大小,因此您还可以立即使用适当的大小为数组标注尺寸以避免重复重新标注尺寸(这对于 VBScript 内置数组往往表现不佳):
ReDim myArray(colDrives.Count \ 2 - 1)
For i = 0 to colDrives.Count-1 Step 2
myArray(i\2) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next
MsgBox Join(myArray, vbNewLine)
另一种选择是使用Dictionary:
Set myArray = CreateObject("Scripting.Dictionary")
For i = 0 to colDrives.Count-1 Step 2
myArray(colDrives.Item(i)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next
MsgBox Join(myArray.Items, vbNewLine)