我做PowerShell而不是VBScript,所以我有点失落。我试图在MsgBox中列出所有映射的驱动器(驱动器号和共享路径)。运行脚本时出现类型不匹配错误。如果我改变了#34; Dim myArray()"到" Dim myArray"我从变量中只得到一个项目。
Set objNetwork = WScript.CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
Dim myArray()
For i = 0 to colDrives.Count-1 Step 2
myArray = colDrives.Item(i) & vbTab & colDrives.Item (i + 1)
Next
MsgBox(myArray)
如何将数据保存到数组中,然后输出到MsgBox?
答案 0 :(得分:4)
您的代码无效的原因是您创建的固定大小数组没有实际大小(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)
答案 1 :(得分:3)
您可以使用字符串并继续追加(&
)。
Dim s
For i = 0 To colDrives.Count-1 Step 2
s = s & colDrives.Item(i) & vbTab & colDrives.Item (i + 1) & vbCrLf
Next
MsgBox s